刚重新建好自己的博客,看到谷歌浏览器地址栏最前面标着“不安全”三个字,还是挺不爽的,所以就顺便配置一下 SSL 证书。

如果你用的是阿里云的服务,那么配置 SSL 挺简单的。

首先去阿里云购买免费的 SSL 证书,有效期一年,到期以后再免费续期。

下载SSL证书

这是我在阿里云文档里找到的一个截图,下载里面的 nginx 压缩包。

解压后的文件夹中有2个文件:
证书文件:以.pem为后缀或文件类型。
密钥文件:以.key为后缀或文件类型。

SSL证书

我用的是 ubuntu server 服务器,那么 nginx 默认安装位置是在:/etc/nginx/

在此目录下创建cert目录,并把证书文件(.pem)和密钥文件(.key)上传到此目录。

SSL证书

然后打开 nginx 配置自己网站的配置文件,把 server {} 这段内容复制粘贴一份,增加以下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
# SSL configuration
listen 443 ssl; #端口改为443,并加上ssl标记,提升兼容性
listen [::]:443 ssl; #这段是ipv6的配置,也是把端口改为443

#ssl on; # 开启SSL(2025年5月更新:新版本nginx不需要这个选项了,直接去掉。)
ssl_certificate cert/domain.com.pem; #证书文件地址
ssl_certificate_key cert/domain.com.key; #密钥文件地址
ssl_session_timeout 30m; #会话过期默认5分钟,我改成了30分钟
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定使用哪些加密协议,SSLv1 SSLv2不安全,不建议使用
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密套件
ssl_prefer_server_ciphers on; #指定服务端加密套件优先
}

保存 nginx 配置文件后,退出。

重启 nginx。

新版本的 nginx 已经不再支持以前的重启命令,需要用新的重启命令

先用命令检查一下 nginx 配置是否正确

1
nginx -t

验证 Nginx 配置

再用命令找到 nginx 服务的进程号

1
ps -ef | grep nginx

查看 Nginx 进程

然后用命令平滑重启,不影响 nginx 继续运行

1
kill -HUP 进程号

平滑重启

实现 http 强制跳转 https 的方法

经查询,有多种跳转方法,最后我选择了这一种。

1
2
3
4
5
6
7
8
server {
listen 80;
listen [::]:80;

server_name www.domain.com;

return 301 https://$server_name$request_uri; # 在http配置处加上这句即可
}

最后附上完整的 nginx 配置(/etc/nginx/sites-enabled/website):

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
31
32
33
34
35
36
37
38
39
40
41
42
server {
listen 80;
listen [::]:80;

server_name www.guozhenyi.com;
root /var/www/website/public;
index index.html index.htm;

return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

ssl_certificate /etc/nginx/cert/www.guozhenyi.com.pem;
ssl_certificate_key /etc/nginx/cert/www.guozhenyi.com.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

server_name www.guozhenyi.com;
root /var/www/website/public;
index index.html index.htm;

add_header Content-Security-Policy "upgrade-insecure-requests;";

location / {
try_files $uri $uri/ =404;
}

location ~* \.(js|css)$ {
expires 1d;
}

location ~* \.(ico|png|jpg|jpeg|gif|webp|svg)$ {
access_log off;
expires 14d;
}

}

参考资料:
在Nginx/Tengine服务器上安装证书
nginx配置SSL(https)

–End–