浏览自建的Discourse论坛时发现浏览器上的小锁有感叹号,表示网站有未使用Https的资源。由于Http资源容易被DNS劫持,同时也是为了美观考虑,决定修复这个Bug,首先定位以下问题。

问题根源

F12打开控制台->网络,刷新后发现所有的资源都是Https,而最后有一个没有任何信息的空资源。这让我有点摸不着头脑,查看网页源码,发现论坛的左上角的Logo加载的是http地址。这主要是由于使用了Nginx反代Discourse,Discourse没有开启SSL而使用了Nginx处理了SSL。

除了Logo外的地址都是相对地址,因此无所谓。但是为什么在控制台没有显示,猜测可能是由于我使用了Cloudflare,在请求http时跳转到了https且被浏览器缓存了。

解决方法

解决方法很简单,在论坛的Settings->Security中开启force https选项,所有的绝对地址都改为了https。