哎呀,说到HSTS这个玩意儿,我可太有发言权了!去年我的小博客就是因为没配置HSTS,被一个客户吐槽说访问时偶尔会跳到不安全的页面,当时真是尴尬得想钻地缝。不过现在好了,经过一番折腾,我的网站已经妥妥地实现了HTTPS强制跳转,今天就和大家唠唠具体怎么操作。
说白了,HSTS就是告诉浏览器:”以后访问我这个网站,必须用HTTPS,别给我整那些HTTP的幺蛾子!”这招特别管用,能防止那种从HTTPS被降级到HTTP的攻击。我当初就是被这种”降级攻击”坑过,用户明明输入的是https,结果莫名其妙变成了http,简直气死人。
我用的是Nginx服务器,配置起来真的不要太简单。就在你的server配置块里加上这么一行:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
看到没?就这一行代码,搞定!max-age设置成31536000秒,也就是一年,意思是告诉浏览器在接下来的一年里都得用HTTPS访问。includeSubDomains是说所有子域名也要遵守这个规矩,preload是准备加入到浏览器的预加载列表里。
用Apache的小伙伴也别急,你们只需要在.htaccess文件或者虚拟主机配置里加上:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
记得要确保mod_headers模块是启用的哦,不然这配置可不生效。我有个朋友就是忘了启用模块,折腾了半天才发现问题所在。
这个preload标志可不是摆设,你得主动去hstspreload.org提交你的域名。这个过程需要一点耐心,因为审核可能需要几周时间。但是一旦通过,你的域名就会被硬编码到浏览器里,用户第一次访问就会强制HTTPS,简直完美!
配置完别忘了测试!打开浏览器开发者工具,在Network标签里查看响应头,如果能看到Strict-Transport-Security这个头,那就说明配置成功了。我第一次配置时就犯了个低级错误,把代码写错了位置,结果死活不生效,后来才发现是语法问题。
说实话,配置HSTS之后,我的网站访问量不降反升,因为用户看到那个小绿锁更有安全感了。而且搜索引擎也更喜欢安全的网站,这对SEO也有好处。现在想想,当初那点折腾完全值得!
参与讨论
这个教程太实用了,收藏!
nginx配置原来这么简单,学到了👍
请问preload提交后要等多久?
max-age设成一年会不会太长了?
Apache用户表示很需要这个教程🤔
博主分享的经历太真实了,我也遇到过类似问题
测试方法很实用,马上试试看
hstspreload.org这个网站打开好慢啊
配置完确实感觉网站安全多了
小绿锁对SEO有帮助这点很关键
为啥我的配置一直不生效,急死人了
博主文风好有趣,看技术文章都不枯燥了