简述: 在远程服务器上部署了 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.key
和5568236_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;