作者 青鸟

前段时间将博客从GitPage托管迁移到了阿里云服务器上,在部署博客的SSL证书时候,由于阿里云的Nginx文档所对应的Nginx版本太老了,在百度的时候查找了好几篇文章但是都是雷同并且版本过老,已经不适用于现在的版本了,这就导致了部署的磕磕绊绊。现在写一篇来记录一下在最新的版本下的部署方法。

注意:本篇所针对的是版本为:

  1. nginx版本:1.18.0 (Ubuntu)
  2. 系统:Ubuntu22.04.1

HTTPS部署

首先要做到的是将SSL证书下载到本地,在相应的云服务控制台中下载相应的对应nginx版本的SSL证书,其中应该包括了两个文件,一个是.pem另一个是.key,这两个文件分别为证书文件和私钥文件。

通过远程连接软件将这两个文件上传到nginx的目录下,默认的位置为/etc/nginx,如果不知道默认的安装路径,可以使用命令nginx -t
这里推荐使用的上传工具为xftp,现在是免费使用的。

在大部分的博客里这里都选择编辑 Nginx 根目录下的 nginx.conf 文件。

但是这也就造成了一个问题,当我们有多个证书需要部署在不同的端口的时候,都写在nginx.conf里面就会显得很拥挤,对后续的管理造成了极大的困难,这就类似于在c++的main函数中写下了所有的逻辑

在新版的nginx中。允许了在nginx.conf中导入其他文件夹中的.conf配置文件,我们针对不同的端口服务,建立不同的conf配置文件,这样极大的方便了nginx配置文件的管理。观察nginx.conf,发现nginx已经为我们建好了一个文件夹,并且导入到了配置文件中

在nginx文件目录下的conf.d文件夹中新建一个配置文件。

同时如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置:
根据实际需求,选择以下配置方式:

  1. 在页面中添加 JS 脚本。
  2. 在后端程序中添加重定向。
  3. 通过 Web 服务器实现跳转。
  4. Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加 return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS。

我们在这个新建的配置文件下添加如下的内容

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
43
44
45
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) https://$server_name$request_uri? permanent;
#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /var/www/example;
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name www.example.com;
#请填写证书文件的相对路径或绝对路径

ssl_certificate /etc/nginx/cert/example.com.pem;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/cert/example.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root /var/www/example;
index index.html index.htm;
}
}

这里要注意一点,80端口是http的端口,在nginx.conf中可能已经配置了,这里注意删除掉相关的配置。

通过执行以下命令验证配置文件问题

1
nginx -t

通过执行以下命令重载 Nginx。

1
nginx -s reload

重载成功,即可使用 https://example.com 进行访问。

说明

未添加注释的配置语句,您按照下述配置即可:

由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443 和 ssl on

参考文章:

Nginx官方文档