阿里云域名配置SSL免费证书

阿里云的免费 SSL 证书是一年一次,每年都得自己重新更换

1. 证书申领

2023年阿里云免费SSL证书申请教程-阿里云开发者社区

2. Nginx 配置 SSL 证书

如何在Nginx或Tengine服务器安装SSL证书_数字证书管理服务-阿里云帮助中心

3. 在Nginx独立服务器上安装证书

  1. 执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。

    1
    2
    cd /etc/nginx/
    mkdir cert
  2. 将证书文件和私钥文件上传到Nginx服务器的证书目录

  3. 编辑Nginx配置文件nginx.conf,修改与证书相关的配置

    1
    2
    cp ./nginx.conf ./nginx.conf.bnk   #备份配置文件
    vim nginx.conf

可选:设置HTTP请求自动跳转HTTPS

如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加**rewrite**语句

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
#填写证书绑定的域名
server_name itchen.icu;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
}
}

4. 单独配置

因为 http 模块默认包含 include /etc/nginx/conf.d/*.conf 的配置,这样的话我们就不需要吧所有的配置都放在同一个文件里,我们可以拆分配置进行解耦

里面可以配置的内容规则就和 http 里编写的一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 443 ssl;
server_name itchen.icu;
root /usr/share/nginx/html;

ssl_certificate "cert/itchen.icu.pem";
ssl_certificate_key "cert/itchen.icu.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

4.1. 多个服务共用 443 端口

由于一台服务器同时有多个服务,这些服务通过域名解析都希望监听 80/443 端口直接通过域名访问,比如有itchen.icu 和 chat.itchen.icu。这时候我们可以使用 nginx 的代理转发功能帮我们实现共用 80/443 端口的需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {

listen 443 ssl;
server_name chat.itchen.icu;
root /usr/share/nginx/html;

ssl_certificate "cert/chat.itchen.icu.pem";
ssl_certificate_key "cert/chat.itchen.icu.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://localhost:8888;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

:::warning
注意事项:
服务器内部转发使用 http 协议而不是使用 https,否者会出现 nginx 502 请求转发报错
:::

4.2 检查配置文件

检查配置文件中是否存在语法错误

1
nginx -t

:::warning
注意事项
虽然可以通过多个文件进行整合,但是每个单独的文件配置的路径都是基于 /etc/nginx/nginx.conf 的路径并不会根据分离的文件内容进行处理后在合并,而是直接合并内容
:::

4.3 重新加载配置文件

已经启动的情况下使用

1
nginx -s reload   #已经启动的情况下使用

未开启 nginx

1
2
cd /usr/sbin/
./nginx