今天跟大家聊聊我这几天搞的https证书安装,真的是一把鼻涕一把泪,踩不少坑,现在总算搞定,赶紧记录下来,希望能帮到大家少走弯路。
话说前几天,公司要求把网站都升级成https,提高安全性嘛这我懂。拿到证书,我心想这还不简单,以前也搞过,三下五除二就能搞定。结果,啪啪打脸!
我按照供应商给的文档,把证书文件上传到服务器,然后修改Nginx的配置文件。改完之后,信心满满地重启Nginx,结果浏览器一访问,直接给我报个大大的“不安全”。
WHAT?
赶紧查日志,发现Nginx报错,说证书链不完整。证书链?啥玩意?以前没注意过!赶紧上网查,才知道https证书需要一个完整的证书链才能被浏览器信任。原来供应商给我的证书文件里,只有服务器证书,缺少中间证书。
赶紧联系供应商,要来完整的证书链文件。把中间证书加到Nginx配置里,再次重启,这回总算没报错。但是,浏览器还是显示“不安全”,不过这回提示的是“混合内容”。
混合内容?又是什么鬼?
继续查资料,原来是网页里有些资源,比如图片、CSS、JS,还是用的http协议加载的。浏览器一看,你这网页一部分安全,一部分不安全,当然要提示。
这下麻烦,得把网页里所有的http资源都改成https。一个个手动改?那得改到猴年马月!还我找到一个比较省事的办法,就是在Nginx配置里加一个rewrite规则,把所有http请求都强制跳转到https。
nginx
server {
listen 80;
server_name *;
rewrite ^(.)$ https://$server_name$1 permanent;
这样,所有http请求都会自动跳转到https,省我不少事。
但是,问题还没完!有些js文件里,写死http的地址,rewrite规则不起作用。这下只能老老实实地手动改。
- 用grep命令搜索所有js文件,找出包含http的行。
- 把http改成https。
- 一个个测试,确保没有问题。
改完之后,总算解决混合内容的问题。浏览器终于显示绿色的“安全”标志。
但是,等等!
我发现,有些页面的样式乱。仔细一看,原来是因为有些CSS文件加载失败。
检查一下Nginx配置,发现是缓存的问题。Nginx缓存旧的CSS文件,导致新的CSS文件无法加载。
解决办法很简单,清除Nginx缓存就行。
bash
rm -rf /var/cache/nginx/
清除缓存后,重启Nginx,样式终于恢复正常。
这回https证书安装,真的是一波三折。
总结一下我踩过的坑:
- 证书链不完整:一定要向供应商索要完整的证书链文件。
- 混合内容:用rewrite规则强制跳转https,手动修改js文件。
- Nginx缓存:清除Nginx缓存。
希望我的经验能帮助到大家,少走弯路。安装https证书,看起来简单,实际上有很多细节需要注意。一定要仔细阅读文档,认真测试,才能确保万无一失。
祝大家都能顺利安装https证书,让网站更安全!