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

问题根源

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

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

解决方法

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