毫无疑问,当然是用Let’s Encrypt
那么就开始搞吧,事实上真的很简单。只是首先要搞清楚自己的部署环境,我用的是基于yeszao/dnmp改写的一个环境,大体上一样,可以直接看yeszao/dnmp。
首先我把域名解析到我的服务器,如果是一个新的域名,则在得到ssl证书之前,给该域名的站点conf中只配置80端口,443端口等后续得到了数字证书以后再添加或解除注释,免得没有ssl的文件nginx无法启动。
然后在该域名的站点的conf中添加
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /www/acme-challenge/;
}
注意,上面root后面对应的地址是基于dnmp的env配置的映射地址,也就是dnmp目录下的www中再新建一个acme-challenge,如果dnmp在/,则实际目录地址是/dnmp/www/acme-challenge,这个地址在下一步用的到。
添加以上规则后,重启nginx。
然后就可以使用命令创建证书了:
sudo certbot certonly --webroot -w /dnmp/www/acme-challenge/ -d "*.isbn.ink" -d isbn.ink
命令也可以明确–server参数
sudo certbot certonly --webroot -w /dnmp/www/acme-challenge/ -d "*.isbn.ink" -d isbn.ink --server https://acme-v02.api.letsencrypt.org/directory
certbot如何安装请看https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal&tab=standard
按提示执行完就行了,甚至都自动创建好了更新任务,任务查看命令:systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2024-01-26 14:11:00 CST 19min left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
ssl证书文件默认会放在/etc/letsencrypt下面,那么结合dnmp的env配置项:
NGINX_SSL_CERTIFICATE_DIR=/etc/letsencrypt
如果有其他站点需要用到NGINX_SSL_CERTIFICATE_DIR的默认配置./services/nginx/ssl,那么还有个办法,即使用ln到/etc/letsencrypt/live:
ln -s /etc/letsencrypt/live /dnmp/services/nginx/ssl
那么,在站点的conf文件中,对443部分的设置如下:
server {
listen 443 ssl;
server_name isbn.ink;
charset utf8;
#ssl on;
ssl_certificate /ssl/live/isbn.ink/fullchain.pem;
ssl_certificate_key /ssl/live/isbn.ink/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /www/localhost;
index index.php index.html index.htm;
location / {
if (!-e $request_filename) {
rewrite (.*) /index.php;
}
}
location ~ [^/]\.php(/|$) {
fastcgi_pass php80:9000;
include fastcgi-php.conf;
include fastcgi_params;
}
}
可以看到我把live放到了conf中,而没有放在NGINX_SSL_CERTIFICATE_DIR设置中,因为live/isbn.ink/fullchain.pem是个软地址,实际文件是指向../../archive/isbn.ink/fullchain1.pem的,这里用了两层父目录,站点域名一层,live占了一层,所以ssl的映射目录只能设置为/etc/letsencrypt。
终于把本站也按这个办法配置好了