SSL已经不是什么新鲜东西了,早在前几个月就有消息称,Chrome将逐渐把所有的HTTP网站标记为“不安全”的红色警告。虽说此博客为全静态,且不涉及到密码登录与支付相关页面服务,但是小绿锁对于爱折腾的我的诱惑还是挺大的。这里记录了Nginx下开启SSL的过程与优化。
本站用的是腾讯云申请的由亚洲诚信免费提供的DV SSL证书,有效期一年。网上有很多证书的获得方式,这里不再赘述(七牛云、阿里云等均有免费SSL证书提供申请)
腾讯云免费SSL证书
阿里云免费SSL证书
申请后会得到2个文件,一个.crt后缀、一个.key后缀。这里我们将它们上传到nginx目录下。
登录服务器,输入
nginx -V
查看输出中是否包含http_ssl,如果没有,请参考此文
打开该站点的.conf文件,修改server块如下:
保存退出,执行nginx -t,提示success,则执行nginx -s reload
部分优化
我们需要对http做跳转到https
添加一个server模块,监听80端口请求:
#301跳转
server {
listen 80;
server_name www.chutest.cn chutest.cn;
return 301 https://www.chutest.cn$request_uri;
}
部分还有http的页面会被提示不安全
我们只需要将页面内非https资源去除即可(或者将其转为https)
旧版的腾讯公益404页面调用的js是不支持https的,这里可以替换为新版的:
title: 404错误|Alliot's blog
layout: false <!--设置标题,同时取消layout-->
---
<!DOCTYPE HTML>
<html>
<head>
<title>404错误|Alliot's blog</title>
<meta name="description" content="404错误,页面不存在!">
<meta http-equiv="content-type" content="text/html;charset=utf-8;">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="robots" content="all">
<meta name="robots" content="index,follow">
</head>
<body>
<script type="text/javascript" src="//qzonestyle.gtimg.cn/qzone/hybrid/app/404/search_children.js" charset="utf-8" homePageUrl="https://chutest.cn" homePageName="回到我的博客"></script>
</body>
</html>
遗留问题
之前以为配置错误,原来是因为缓存的原因。
考虑到SEO的因素(强迫症),我想做到一篇文章只有唯一的URL,即不管访问www.chutest.cn 还是 http://chutest.cn 亦或者是 http://www.chutest.cn ,均301自动跳转到https://www.chutest.cn , 也就是说 https://www.chutest.cn 作为唯一的访问Url。
我想直接通过两次的301达到这个目的:
server {
listen 80;
server_name www.chutest.cn iots.vip;
return 301 https://www.chutest.cn$request_uri;
}
server {
listen 443;
server_name chutest.cn;
return 301 https://www.chutest.cn$request_uri;
}
上面的空格必须要,不能丢。因为nginx语法检测特别严格,if和后面括号以及变量等号这些元素都要有空格。
PS:如果此文为您解决燃眉之急或是带来些许明朗,那就关注吧