Hexo配置Https

之前折腾过WordPress,想弄个SSL玩玩,所以就去申请了免费的证书,一顿操作也就搞定了,现在觉得Hexo也不错,所以就换到了Hexo上,也打算把SSL弄过来。

网上有人说去修改~/your_hexo/node_modules/hexo-server/lib/server.js ,引入express ,然后就修改默认的端口为443就可以,别说,还真的可以,但是也出现了一些其他的问题,比如hexo有些命令无法执行,报错:80端口被占用。

我对前端的内容不是很了解,也就不想再去调试源码了,但是换个思路一想,其实只需要一个nginx转发一下就可以满足我的需求了,所以,那就动手把。

安装nginx

我目前的系统是Ubuntu 16.04,直接安装nginx,执行如下命令:

1
apt install nginx

上传证书

安装完毕之后,上传我们申请到的证书

1
2
cd /etc/nginx
mkdir ssl

之后将证书上传到新建的ssl文件夹下。

配置SSL并新增转发规则

新建nginx配置文件,监听80和443端口,另外将80端口的访问转发到443端口来

1
2
cd /etc/nginx/conf.d/
vi www.xxx.com.conf # 这里我一般习惯用网站域名来命名

在新增的配置文件中写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
listen 80;
server_name www.xxx.com; # 这里写你的域名
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name www.xxx.com; #将localhost修改为您证书绑定的域名,例如:www.example.com。
ssl_certificate ssl/xxx_public.crt; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key ssl/xxx.key; #将domain name.key替换成您证书的密钥文件名。
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;
access_log /var/log/nginx/hexo_access.log;
error_log /var/log/nginx/hexo_error.log;

location / {
proxy_pass http://localhost:4000; # 这里就是hexo server启动的默认端口
}
}

文件保存完毕之后,由于nginx默认监听了80端口,所以需要将nginx默认监听的端口换掉(比如换成81,只要不被占用就行),需要修改如下文件:

1
vi /etc/nginx/sites-enabled/default

将默认监听的80换掉即可。

验证nginx配置是否正常,执行如下命令

1
nginx -t

没有错误提示即可!

重新加载nginx配置:

1
nginx -s reload

验证https是否生效

如果我们此时可以通过https正常访问,那么SSL的配置基本到此就结束了,如果访问不通,那么可以通过两个地方排查:

  1. hexo是否启动?如果没有启动,需要先执行hexo s指令,然后重试
  2. 服务器是否配置有白名单、防火墙之类的东西?
    我目前是使用的云服务器,所以对80和443端口做了放行。

WordPress迁移带来的其他问题

  1. 由于之前使用的WordPress,迁移到Hexo之后,原来的链接(搜索引擎的快照)可能就失效了,所以为了避免出现通过搜索引擎无法访问的问题,最好找到那些失效的链接,然后在nginx里手动转发一下。

  2. 关于sitemap的问题,如果有需要,重新去生成一个sitemap.xml,然后在nginx中做好转发,然后提交给搜索引擎。