简述: 在远程服务器上部署了 Hexo 之后,设置部署 https 证书(SSL),记录申请证书、配置相关 nginx 服务,远程服务器为 Ubuntu 20.04

本文初发于 “曾晨de小站” zengchen233.cn,同步转载于此。

环境

自己的阿里云主机相关环境:

  • Ubuntu 20.04
  • nginx version: nginx/1.18.0 (Ubuntu)

申请 SSL

可以打开阿里云官网搜索SSL,左侧选择 “SSL 证书-证书资源包” 里面购买免费的 SSL 证书资源包,一年最多 20 个,每个时间为一年;

点击证书申请,在 “状态” 一栏 按照如下步骤,依次填写对应的,其中设置解析记录选择自动即可:

当到最后一步骤(此时 “状态” 一栏也会变成“已签发”)。

点击下载对应的 nginx 的证书,下载后解压会得到两个文件 :

点击下载对应的 nginx 的证书,下载后解压会得到两个文件 5568236_zengchen233.cn.key5568236_zengchen233.cn.pem

部署 SSL

上传证书

通过 winscp 将上面证书的的两个文件上传到远程服务器的家目录下;然后登陆到远程服务器,将证书文件移动到 /usr/share/nginx/cert 路径下,注意不是 /etc/nginx/nginx.conf 路径;直接 scp 到此目标路径下,会报权限拒绝,故此周转一下。

登陆到远程服务器,创建好 cert/文件夹
sudo mv 5568236_zengchen233.cn.* /usr/share/nginx/cert/

配置 nginx

修改 nginx 配置文件,修改之前先记得备份

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
sudo vim /etc/nginx/sites-available/default

找到如下地方,

# Default server configuration
server {
	listen 80 default_server;
	listen [::]:80 default_server;

将其修改为:将原先的一个 server 拆分为两个 server;listen 80 表示 http 协议,访问会 return ;强制改为跳转为 https: 协议访问(listen 443);不然就会可同时访问 http 和 https 两个,而默认浏览器输入 zengchen233.cn 顶级域名,默认是选择 http 这个,会有警告小锁提示。

# Default server configuration
server {
        listen 80 default_server;
        listen [::]:80 default_server;


        server_name zengchen233.cn;
        return 301 https://$server_name$request_uri;
}

server {

        # SSL configuration
        #
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl_certificate      /usr/share/nginx/cert/5568236_zengchen233.cn.pem;
        ssl_certificate_key  /usr/share/nginx/cert/5568236_zengchen233.cn.key;

检测配置 nginx 成功

执行命令,检测配置 nginx 是否正确,

sudo nginx -t

配置成功也会输出如下

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启nginx服务后(也可重启服务器),

sudo service nginx reload (重载)
sudo systemctl restart nginx (重启)

访问成功

再次在 chrome 中输入域名;即可看到安装的小锁,开启 https 访问成功。

其它

若是遇到中途遇到页面访问报错如下:

400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx/1.18.0 (Ubuntu)

则通常是将配置下面两行的时候,多加了一行 ssl on;,将其删掉、或注释掉、或者改写为 ssl off; 即可:

ssl on;
ssl_certificate      /usr/share/nginx/cert/5568236_zengchen233.cn.pem;
ssl_certificate_key  /usr/share/nginx/cert/5568236_zengchen233.cn.key;

参考