简 述: 上一篇在远程服务器上部署了 Hexo
之后,这是其后续一篇,设置部署 https
证书(SSL
),记录申请证书、配置相关 nginx
服务,其远程服务器为 Ubuntu 20.04
。
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
环境
自己的阿里云主机相关环境:
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.key
和 5222721_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;