在nginx上开启使用https
这两天在自己的博客上启用了全站https,把过程在这里分享一下。
什么是https
维基百科上是这样定义的;
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
由于我们网络状况复杂,https有一个很重要的作用是防止运营商和路由器的拦截😓。
站点开启https后,浏览器访问时会有标记,chrome上是一把绿色的锁:
嗯,安全!
申请证书
CA机构颁发的证书有3种类型,信用登机从低到高分别为域名型SSL证书(DV SSL),企业型SSL证书(OV SSL),增强型SSL证书(EV SSL)。
企业型SSL证书(OV SSL),增强型SSL证书(EV SSL)还是比较贵的,个人博客站用域名型SSL证书就可以了。
我的服务器放在腾讯云,腾讯云可以申请免费的DV SSL证书:
证书申请只需要填写域名及邮箱,再验证一下域名的归属就可以了。官网上写的审核需要1个工作日。但是我等了不到半个小时就通过了。
通过之后可以下载到本地,有两个文件。分别是.crt
结尾的证书文件和.key
结尾的私钥文件。
证书安装
之前博客是用node做的静态服务,一直想学nginx,这次正好一起换了。nginx上配置https非常简单,编辑nginx.conf文件(如果不知道在哪里可以运行一下nginx -t
):
1 | server { |
配置完成后,先用bin/nginx –t
来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.domain.com 来访问了。
全站https
全站https其实就是在用户访问http站点时跳转到https,这个也可以设置nginx的转发来完成。
腾讯云上写的是使用rewrite:rewrite ^(.*) https://$host$1 permanent;
,由于需要匹配正则对性能有影响,因此不是最好的方法。
更推荐的做法是直接使用301永久转移:
1 | server { |