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

[TOC]


本文初发于 “偕臧的小站” ifmet.cn,同步转载于此。


环境

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

  • Ubuntu 20.04 focal
  • Kernel: x86_64 Linux 5.4.0-47-generic
  • nginx version: nginx/1.18.0 (Ubuntu)

申请 SSL

​ 一年前,在阿里云申请过一次免费的 ssl :刚买的域名怎么绑定自己博客?再白嫖一年的SSL,使用https访问博客 ,但是每次最长时间仅一年,顿感入口隐藏只深;

​ 现在再次需要申请阿里云免费 ssl,发现入口比之前更深了,方法也比之前复杂多了;是互相在比下限嘛


登录阿里云,左侧选择 “SSL 证书-证书资源包” 里面购买免费的 ssl 证书资源包,一年最多 20 个,每个时间依旧一年;

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

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

​ 点击下载对应的 nginx 的证书,下载后解压会得到两个文件 5222721_ifmet.cn.key5222721_ifmet.cn.pem 文件;


部署 SSL

上传证书

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

scp 5222721_ifmet.cn.* xmuli@20.21.1.11:~/  # 上传文件
登陆到远程服务器,创建好 cert/文件夹
sudo mv 5222721_ifmet.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 两个,而默认浏览器输入 ifmet.cn 顶级域名,默认是选择 http 这个,会有警告小锁提示。

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


        server_name ifmet.cn www.ifmet.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/5222721_ifmet.cn.pem;
        ssl_certificate_key  /usr/share/nginx/cert/5222721_ifmet.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

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

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/5222721_ifmet.cn.pem;
ssl_certificate_key  /usr/share/nginx/cert/5222721_ifmet.cn.key;

参考