Nginx 至 HTTPS
HTTPS(HyperText Transfer Protocol Secure)即超文本传输安全协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。
增加 SSL 模块
部分早期编译安装的 nginx 缺乏 ssl 模块,先查看一下当前模块:
/path/sbin/nginx -V
回到安装包位置,找到 configure
文件:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
取代现有:
# 生成 ./objs/nginx
make
# 备份
cp /path/sbin/nginx /path/sbin/nginx.bak
# 覆盖前先停止 nginx 服务
cp ./objs/nginx /path/sbin/
# 再验证
/path/sbin/nginx -V
阿里云证书
1. 申请证书
阿里云也提供了 SSL 证书的功能,购买免费型 DV SSL(在小字提示中可以注意到免费证书可以申请 20 个),购买成功后会在 SSL 证书控制台看到一个未签发的证书。
点击申请,然后绑定域名即可,例如 blog.shanyuhai.top
,稍等片刻即可等待审核完成。
2. 安装证书
找到域名对应的证书,下载至本地,然后上传至服务器。
# 创建证书目录
sudo mkdir /etc/nginx/certs
# 拷贝证书到 certs 目录下
sudo mv ~/downloads/blog.shanyuhai.top_nginx.zip /etc/nginx/certs
# 解压
sudo unzip blog.shanyuhai.top_nginx.zip
# 修改命名
mv 2813835_blog.shanyuhai.top.key blog.shanyuhai.top.key
sudo mv 2813835_blog.shanyuhai.top.key blog.shanyuhai.top.key
.conf
文件
3. 修改 找到之前 Nginx 对应的 blog.shanyuhai.top
的配置文件。
sudo vim /etc/nginx/conf.d/blog.conf
# 添加如下内容
server {
listen 443 ssl;
server_name blog.shanyuhai.top;
# 证书文件
ssl_certificate certs/blog.shanyuhai.top.pem;
# 秘钥文件
ssl_certificate_key certs/blog.shanyuhai.top.key;
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;
location / {
root /var/www/html/blog;
index index.html;
}
}
# 接着访问 https://blog.shanyuhai.top 验证
4. 重定向 http 到 https
# 将 80 端口的虚拟机修改为以下内容
server {
listen 80;
server_name blog.shanyuhai.top;
access_log /var/log/nginx/blog.access.log main;
rewrite ^(.*) https://$host$1 permanent;
}
sudo nginx -s reload # 重启 nginx 服务
# 接着访问 http://blog.shanyuhai.top 验证
Let's Encrypt 证书
1. 说明
Let's Encrypt 提供的 certbot 可以快速生成证书,并能够自动完成配置。
还原阿里云做的配置,并打开网站验证是否还原。
选择 Nginx 和 Ubuntu 18.04 后就会弹出对应的安装步骤。
2. Add Certbot PPA
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
3. Install Certbot
sudo apt-get install certbot python-certbot-nginx
4. Get and install your certificates
# 执行后根据提示一步步安装即可
sudo certbot --nginx
cat /etc/nginx/conf.d/blog.conf # 查看变化
# 访问 https://blog.shanyuhai.top 验证
5. Test automatic renewal
Let’s Encrypt 证书的有效期为 90 天,所以需要自动续订。
sudo certbot renew --dry-run