前言
HTTPS的安全性毋庸置疑,在Docker Compose 部署WordPress + 宿主机 Nginx 实现 HTTPS 反向代理中讲过我的个人站点是在宿主主机里面实现的HTTPS。本文主要讲怎么去配置HTTPS,当然前提是已经安装好了Nginx,如果对NGINX安装不了解的,可以参考Nginx相关
推荐免费的Let’s Encrypt证书
1.何为Let’s Encrypt证书
Let’s Encrypt是由互联网安全研究小组(ISRG)运营的非营利性证书颁发机构,免费提供传输层安全性协议(TLS)加密的X.509证书。它是世界上最大的证书颁发机构,超过3亿个网站使用其服务,其目标是确保所有网站的安全并使用HTTPS。提供该服务的互联网安全研究小组(ISRG)是一个公益组织。
该证书最大的优点是:
- 自动化配置
- 自动化续签
2.Let’s Encrypt证书配置
1.安装 certbot 和 nginx 插件
sudo apt update
sudo apt install certbot python3-certbot-nginx2.自动申请证书并配置 nginx
sudo certbot --nginx重点这个命令会自动读取你的Nginx配置的server name,
3.HTTPS 自动续期(Let’s Encrypt)
sudo certbot renew --dry-run执行完见到如下图,证明自动续签机制已经成功,我的证书是双域名

4.完整NGINX配置
从下面我的NGINX配置中可以看出,证书文件目录、证书私钥目录都是certbot给我自动生成的,我的证书配置了2个域名
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#绑定证书的域名
server_name binarybard.cn;
#证书文件的相对路径或绝对路径
ssl_certificate /etc/letsencrypt/live/binarybard.cn/fullchain.pem; # managed by Certbot
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/letsencrypt/live/binarybard.cn/privkey.pem; # managed by Certbot
ssl_session_timeout 5m;
#协议版本
ssl_protocols TLSv1.2 TLSv1.3;
#加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root /var/www/html/wordpress;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
# 转发请求给到docker 中的nginx
location / {
proxy_pass http://172.19.0.5:80;
# 以下是关键头部,必须有
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; # 告诉 WordPress 是 HTTPS
}
}
server {
#listen 80 default_server;
#listen [::]:80 default_server;
#SSL 默认访问端口号为 443
listen 443 ssl;
#绑定证书的域名
server_name xxx.binarybard.cn;
#证书文件的相对路径或绝对路径
ssl_certificate /etc/letsencrypt/live/binarybard.cn/fullchain.pem; # managed by Certbot
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/letsencrypt/live/binarybard.cn/privkey.pem; # managed by Certbot
ssl_session_timeout 5m;
#协议版本
ssl_protocols TLSv1.2 TLSv1.3;
#加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name binarybard.cn xxx.binarybard.cn;
# 所有 http 请求统一重定向到 https
return 301 https://$host$request_uri;
}
测试HTTPS是否正常工作
1.浏览器访问:https://yourdomain.com
2.使用 SSL 检测工具SSL Labs 检测可以检查的网站的整体安全性
下面的截图是我的网站检测结果
