SSL已经不是什么新鲜东西了,早在前几个月就有消息称,Chrome将逐渐把所有的HTTP网站标记为“不安全”的红色警告。虽说此博客为全静态,且不涉及到密码登录与支付相关页面服务,但是小绿锁对于爱折腾的我的诱惑还是挺大的。这里记录了Nginx下开启SSL的过程与优化。
申请证书
本站用的是腾讯云申请的由亚洲诚信免费提供的DV SSL证书,有效期一年。网上有很多证书的获得方式,这里不再赘述(七牛云、阿里云等均有免费SSL证书提供申请)
腾讯云免费SSL证书
申请后会得到2个文件,一个.crt后缀、一个.key后缀。这里我们将它们上传到nginx目录下。
修改配置
登录服务器,输入1
nginx -V
查看输出中是否包含http_ssl,如果没有,请参考此文
打开该站点的.conf文件,修改server块如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18server {
listen 80;
#新增监听443端口,并指定443为ssl:
listen 443 ssl;
server_name www.iots.vip;
#ssl配置
ssl_certificate xxx.crt; #证书公钥文件路径(替换为自己的证书路径与文件名)
ssl_certificate_key xxx.key; #证书私钥文件路径(替换为自己的证书路径与与文件名)
ssl_session_timeout 5m; #5分钟session会话保持
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
#ssl配置
location / {
#其他规则保持不变
}
}
保存退出,执行nginx -t,提示success,则执行nginx -s reload
部分优化
我们需要对http做跳转到https
添加一个server模块,监听80端口请求:1
2
3
4
5
6#301跳转
server {
listen 80;
server_name www.iots.vip iots.vip;
return 301 https://www.iots.vip$request_uri;
}
部分还有http的页面会被提示不安全
- 我们只需要将页面内非https资源去除即可(或者将其转为https)
- 旧版的腾讯公益404页面调用的js是不支持https的,这里可以替换为新版的:
1 | title: 404错误|Alliot's blog |
遗留问题
之前以为配置错误,原来是因为缓存的原因。
考虑到SEO的因素(强迫症),我想做到一篇文章只有唯一的URL,即不管访问 https://iots.vip 还是 http://iots.vip 亦或者是 http://www.iots.vip ,均301自动跳转到https://www.iots.vip , 也就是说 https://www.iots.vip 作为唯一的访问Url。
我想直接通过两次的301达到这个目的:1
2
3
4
5
6
7
8
9
10server {
listen 80;
server_name www.iots.vip iots.vip;
return 301 https://www.iots.vip$request_uri;
}
server {
listen 443;
server_name iots.vip;
return 301 https://www.iots.vip$request_uri;
}
上面的空格必须要,不能丢。因为nginx语法检测特别严格,if和后面括号以及变量等号这些元素都要有空格。
证书更新
2017年9月18日更新:
今天发现访问博客的时候,提示SSL证书不受保护,意味着证书到期了。 这里我们需要更新一下证书:
更新证书很简单,分如下三步:
重新申请证书
再次申请一个证书,下载,上传并覆盖之前的旧文件(存放位置见上文)。
重启web服务器
覆盖旧文件后,还未生效,我们需要重启web服务器。
Nginx直接执行:1
nginx -s reload
Apache执行:1
service httpd reload
部署CDN证书
(未开启CDN中HTTPS功能的请忽略此步)我们完成以上两步后,还需要在CDN控制台更新我们的证书文件,腾讯云请直接选择:域名-管理-高级配置-部署已有证书
这样整个更新步骤完成,小绿锁又回来了。