文章
本文总阅读量

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部署变得简单。以下是一般步骤:

  1. 更新系统包列表: sudo apt update
  2. 安装Snapd: sudo apt install snapd
  3. 确保snapd是最新版本: sudo snap install core; sudo snap refresh core
  4. 通过Snap安装Certbot: sudo snap install --classic certbot
  5. 准备Certbot命令的运行环境: sudo ln -s /snap/bin/certbot /usr/bin/certbot
  6. 接下来我们可以为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已经代理的域名,可以自己选择
    alt text
    接下来如果你的域名设置过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代理到后端端口。

  1. 设置定时任务: 打开定时任务 sudo crontab -e在定时任务的最下方添加0 2 1 * * /usr/bin/certbot renew也就 是每个月2号的1点进行更新证书,SSL证书就会自动续期。更新时间可以自己选择。

至此就完成了所有的配置,

本文由作者按照 CC BY 4.0 进行授权