nginx部署SSL
nginx部署SSL
环境为阿里云 ubuntu 20.04
如今不管是阿里云还是腾讯云,通过工作台生成的免费SSL证书有效期只有30天,因此长期稳定的SSL证书成了需求。
我们选择使用Let’s Encrypt来生成SSL证书提供商。 在ubuntu系统中,可以使用Certbot工具。Certbot是由EFF(Electronic Frontier Foundation)开发的一个免费的开源软件,用于自动使用Let’s Encrypt证书,使HTTPS部署变得简单。以下是一般步骤:
- 更新系统包列表:
sudo apt update
- 安装Snapd:
sudo apt install snapd
- 确保snapd是最新版本:
sudo snap install core; sudo snap refresh core
- 通过Snap安装Certbot:
sudo snap install --classic certbot
- 准备Certbot命令的运行环境:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
- 接下来我们可以为nginx已经配置的域名生成SSL证书。 首先假定nginx现在已经代理了一个域名,比如
1 2 3 4 5 6
server { listen 80; server_name xxxxxxxxx.com;//域名 # Redirect all HTTP requests to HTTPS return 308 https://$host$request_uri; }
并且nginx服务已经启动。输入
sudo certbot --nginx
certbot 就会检测所有nginx已经代理的域名,可以自己选择
接下来如果你的域名设置过DNS解析那么可以顺利进行下一步,生成证书,否则就需要设置DNS解析。 阿里云DNS解析参考:https://help.aliyun.com/zh/dns/add-a-dns-record?spm=a2c4g.11186623.0.0.611b585929L7QC
腾讯云DNS解析参考:https://cloud.tencent.com/document/product/302/3446
完成过DNS解析就可以生成SSL证书,生成的证书会保存在
1
2
/etc/letsencrypt/live/xxxxxx.com/fullchain.pem;
/etc/letsencrypt/live/xxxxxx.com/privkey.pem;
xxxxxx.com为你自己的域名地址。
这时候在nginx里面配置SSL相关的命令即可启动nginx,配置参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 443 ssl;
server_name xxxxxxx.com;
#SSL configuration
ssl_certificate /etc/letsencrypt/live/xxxxxxx.com/fullchain.pem; # 使用certbot显示的证书路径
ssl_certificate_key /etc/letsencrypt/live/xxxxxxx.com/privkey.pem; # 使用certbot显示的密钥路径
#推荐加上更强的SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Normal web root location
location / {
}
}
即可将Https代理到后端端口。
- 设置定时任务: 打开定时任务
sudo crontab -e
在定时任务的最下方添加0 2 1 * * /usr/bin/certbot renew
也就 是每个月2号的1点进行更新证书,SSL证书就会自动续期。更新时间可以自己选择。
至此就完成了所有的配置,
本文由作者按照 CC BY 4.0 进行授权