hexo-https配置

asciicast

这篇是直接复制 https://www.xiaoweigod.com/webserver/904.html

p 443` 发现是softether占用了443端口,停用softether。现在突然想起了就记录一下。还有阿里云的免费证书申请也有个坑,就像游戏秘籍一下,看半天没有找到免费的,好像是要点到公司里面然后再选免费的才会显示,证书到期可以提前购买,好像也是免费的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
nginx 服务器重启命令,关闭
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

关闭nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx

其他的停止nginx 方式:

ps -ef | grep nginx

kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx



启动nginx:
nginx -c /path/to/nginx.conf

平滑重启nginx:
kill -HUP 主进程

第二步,配置SSL证书到服务器。

在上一步我们下载了自己的证书,解压得到两个文件,一个是pem证书文件,一个是key秘钥文件。

为了规范起见,把这两个文件命名为你的网址(不能用中文字符),比如我把两个文件分别命名为xiaoweigod.com.pem和xiaoweigod.com.key,然后打开winscp,连接自己的服务器,把这两个文件上传到 /etc/ssl/certs目录中,如果没有这个目录,自己新建一个。

提示:由于https连接需要服务器开启443端口,博主用的是阿里云,默认安全策略关闭了443端口,需要开启服务器的443端口才能正常访问,需要去控制台添加安全组规则,将443端口开放。其他主机提供商也类似,如果是系统自带iptable防火墙,请设置允许443端口开放。

第三步,配置Nginx支持SSL。

如果你的Nginx只挂了一个网站,没有用vhost,那么配置文件是 /usr/local/nginx/conf/nginx.conf,如果你的Nginx挂了多个网站或者启用了vhost,那么配置文件是 /usr/local/nginx/conf/vhost/你的域名.conf

打开配置文件。在 server{ } 中加入以下内容:

1
2
3
4
5
6
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/_certificate_key /etc/ssl/certs/ ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

以下为代码解释,方便排查问题。

1
2
3
4
5
6
7
8
listen 443;   服务器监听443端口(常规SSL端口)
ssl on; 开启SSL加密
ssl_certificate /etc/.../xx.pem; 指明证书文件的路径
ssl_certificate_key /etc/.../xx.key; 指明证书秘钥的路径
ssl_session_timeout 5m; 超时等待时间5分钟
ssl_ciphers ...; SSL握手密码
ssl_protocols...; 仅使用TLS
ssl_prefer_server_ciphers on; 握手密码服务器偏好

配置完成后,打开xshell连上服务器,执行

1
service nginx restart

重启nginx 服务。

重启过程中如果出现如下等错误,请根据提示检查刚才更改的Nginx配置文件有没有语法错误。这里很详细的提示了具体哪个文件哪一行有错误。

1
2
Stoping nginx... nginx: [emerg] unknown directive in /usr/local/nginx/conf/vhost/www.xiaoweigod.com.conf:6
failed. Use force-quit

做完这些步骤,在浏览器中清空缓存,访问 https://你的域名 应该就可以看到效果了,SSL加密完成。

特别注意,如果引入了http(非加密)外链,会使页面出现安全警告,所以请保证页面上所有的外链资源都是https开头或者是本地服务器资源。