为博客添加 Let's Encrypt https 证书
本文主要记录如何为网站添加 Let’s Encrypt https 证书、设置定时任务自动更新 https 证书和配置 nginx 从 http 自动跳转至 https。
一、生成证书并配置
本文以以下域名进行演示说明:
- example.com
- www.example.com
首先需要确保以上域名在公网上能通过 http 正常访问,以下为相关 nginx 配置:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
然后执行以下命令安装 certbot:
yum install certbot
接下来执行以下命令并按提示操作以生成 https 证书:
certbot certonly --webroot \
-w /var/www/example.com \
-d example.com \
-d www.example.com
请注意我们网站根目录为:
/var/www/example.com
,请确保该目录存在。
完成上述操作后,会在 /etc/letsencrypt/live/example.com
目录下生成 https 证书。更新 nginx 配置即可使用该 https 证书,配置如下:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com;
index index.html;
}
使用以下命令重启 nginx 即可通过 https 访问:
# 重启 nginx
nginx -s reload
二、自动更新
通过 certbot 创建的 https 证书会在 90 天后失效,我们需要定期更新 https 证书。更新证书时使用以下命令即可,该命令会自动判断系统中通过 certbot 创建的 https 证书是否需要更新,如果需要更新则会进入自动更新程序,如果不需要则跳过本次更新。
certbot renew
我们可以通过 crontab 设置定时任务,每天检查更新,以确保 https 证书始终有效。
# 首先使用以下命令编辑定时任务
crontab -e
然后在打开的编辑器中添加以下指令即可:
0 1 * * * certbot renew --post-hook "/usr/local/nginx/sbin/nginx -s reload" >/dev/null 2>&1
如果打开的是 nano 编辑器,保存的操作为
Ctrl-X
然后输入Y
或N
并回车。
以上指令的意思是每天早上 01:00 的时候执行 certbot renew
更新 https 证书,并在证书更新后重启 nginx 服务器,如果证书没有更新,则不会重启 nginx 服务器。
三、配置 http 跳转至 https
更新配置信息,将 80 端口单独配置如下:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
location / {
return 301 https://$host$request_uri;
}
# 保留此配置以供 certbot 自动更新时使用
location /.well-known/acme-challenge/ {
root /var/www/example.com;
}
}
变量意义请参考:
本文完。