hexo博客部署云服务器开启https

​ 自己的博客也开通一段时间了,一直没有开启https,今天开启顺便记录一下自己的开启过程。

我的服务器是阿里云的,域名也是再阿里云购买,所以在此选择SSL证书也是阿里云的DV免费版。

获取证书

我这里选择的是阿里云SSL证书,DV免费版,有效期一年。

阿里云SSL证书申请流程可以到阿里云官方网站获取。

在验证域名所有权审核通过后,就可以到SSL证书管理控制台下载对应服务器的证书。

我使用的是Nginx,所以下载对应Nginx版本,解压下载文件后得到两个文件:.key文件和.pem文件。

上传证书到服务器

再服务器上创建一个文件夹,用于存放证书文件,我的路径是:/home/SSL

Nginx配置文件中证书设置

编辑Nginx的配置文件,如/usr/local/nginx/conf/nginx.conf

在配置文件的后边添加下述配置保存重启nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443;
server_name sfanonline.cn; # 填写绑定证书的域名
ssl on;
ssl_certificate /home/SSL/2710787_www.sfanonline.cn.pem;
ssl_certificate_key /home/SSL/2710787_www.sfanonline.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件
ssl_prefer_server_ciphers on;
location / {
root /www/wwwroot/hexo; # 站点目录
index index.html index.htm;
}
}

如果使用全站加密,有些用户不知道https访问情况,可以让服务器自动把http的请求重定向到https。再Nginx支持rewrite

再nginx的server listen 80配置中添加

1
rewrite  ^(.*)$ https://$host$1 permanent;

这样的配置,实现http80请求进来,重定向为https了。

在配置文件配置可能的报错

在centos中,配置nginx的https时,出现如下错误。

nginx: [emerg] unknown directive “ssl” in /usr/local/nginx/conf/nginx.conf:102

解决方法如下

1.到解压的nginx目录下

1
./configure --with-http_ssl_module

2.执行以上仍然出现问题

1
2
yum -y install openssl openssl-devel
再执行./configure

3.重新执行

1
2
./configure --with-http_ssl_module
make ,切记不能make install会全覆盖

4.把原来nginx备份,把新的nginx覆盖旧的

1
2
3
4
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

把新的nginx覆盖旧的
cp objs/nginx /usr/local/nginx/sbin/nginx

以上操作就可以解决问题

有些还可能再执行4时候出现

1
2
3
4
cp: cannot create regular file ‘/usr/local/nginx/sbin/nginx’: Text file busy

用cp -rfp objs/nginx /usr/local/nginx/sbin/nginx解决

测试nginx是否正确

1
2
3
4
5
6
7
8
/usr/local/nginx/sbin/nginx -t

(nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful)

重启nginx

/usr/local/nginx/sbin/nginx -s reload