春节快乐!今天我们来填先前挖的坑。这次主要讲讲SSL证书和nginx的配置。
配置nginx
配置网站
在/etc/nginx/conf.d
目录下新建一个以.conf
为后缀名的配置文件。以我的二级域名cnachen.com为例:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name cnachen.com;
root /srv/intro-next;
index index.html index.htm;
error_page 404 /404.html;
location / {
try_files $uri $uri/ =404;
}
}
这样,就配置了nginx监听443端口(https)上对于cnachen.com的访问,并设置网站的根目录,主页,404页面。更多配置方法查询nginx的文档。
对于其他的子域名,只需要新建配置文件,将server_name改成对应的子域名,root改成对应的根目录就好。
配置http自动重定向到https
由于我们已经对全站启动了https,因此可以将所有对http端口的访问转发到https端口。
新建一个配置文件rediret-http.conf
:
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
配置没有利用上的子域名自动重定向到某个网站
有的时候,我们提前在域名注册商添加了数条三级域名的解析,但是还没有用上这些域名,可以选择将它们转发到某个地方。
新建一个配置文件rediret-subdomains.conf
:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
return 301 https://cnachen.com;
}
配置SSL证书
作为学生党,能白嫖那还是要白嫖的。因此我选择使用acme.sh自动从ZeroSSL签发证书并安装。
首先安装acme.sh到~/.acme.sh
,将邮箱改成你自己的:
curl https://get.acme.sh | sh -s email=<email>
然后来生成证书,由于我需要为多个子域名签发证书,所以使用acme.sh提供的DNS API来验证域名的所有权。此处以我的域名注册商NameSilo为例。
首先前往NameSilo,打开API Manager,这里的IP限制可以填入你的服务器IP,防止API Key泄露后被滥用。
然后在服务器上执行:
export Namesilo_Key="<key>"
acme.sh --issue --dns dns_namesilo -d <example.com> -d <*.example.com> --dnssleep 900
-d
参数是你想要配置的域名/子域名。由于DNS API的方式需要acme.sh添加一条TXT条目来验证域名所有权,因此需要使用--dnssleep
参数来描述添加此条目后等待DNS刷新所需要的秒数,acme.sh在等待这么多秒后就会尝试后续的注册流程。
执行完上述过程后就会在~/.acme.sh的某个子目录中生成Key和Fullchain文件,此时证书已经签发,但还未配置到服务器。
对于我使用的nginx服务器,执行如下指令来安装证书:
acme.sh --install-cert -d <example.com> \
--key-file /etc/nginx/ssl/<example.com.key> \
--fullchain-file /etc/nginx/ssl/<fullchain.cer> \
--reloadcmd "systemctl restart nginx"
之后,acme.sh会在证书到期时自动调用以上过程来签发并安装证书,这个过程中会调用重载指令--reloadcmd
。
打开你的网站再看一眼,此时应该已经能够以https访问了。
结语
这下我们就做完了建立一个网站所需要的最基本的配置,之后就在这基础上添砖加瓦就好了。
但就如开尔文勋爵所说的「物理学的大厦已经落成,上面只有两朵乌云」,我们也有两片乌云还没有解决。至于是什么乌云,我还没有想好,想好了再来忽悠你们。
润了,大家拜拜。
真好呢
怎么收藏这篇文章?
不错不错,我喜欢看
想想你的文章写的特别好
博主真是太厉害了!!!