不安全的字体请求

混合内容:页面“<URL>”是通过 HTTPS 加载的,但请求了一个不安全字体“<URL>”。此请求已被阻止;内容必须通过 HTTPS 提供

并且有 40 个来自 discourse-fonts gem 的字体请求。这是一个全新的安装,Postgres 和 Redis 运行在本地网络内的独立服务器上,连接是“套接字”连接,但当然是通过 HTTPS 对外提供服务的。有类似 的帖子,但对我来说没有明确的答案。检查 CSS 指向 wizard.scss(源映射)。有什么线索吗?

您是否启用了“强制 HTTPS”设置?

1 个赞

很可能不会。我在哪里设置它?为什么它首先需要,而不是让 CSS 通过 https 或相对引用请求静态资源?

FWIW - 在面向外部的 Web 服务器上,我确实有典型的 301 设置。

编辑:

根据这篇文章,我找到了设置,谢谢 @Arkshine

1 个赞

我不确定为什么您在某个地方有一个 http 链接;无论如何都应该强制使用 https。

您可以在搜索栏中找到:

2 个赞

嗯,我也不知道。我什么都没改。只是常规的 launcher build app。这些 URL 似乎在处理过的 CSS 中,我显然没有以任何方式触碰过(也没有触碰过 scss)。我在 app.yml 中也没有找到任何与 https 相关的内容,所以……不知道。force_https 似乎解决了这个问题。

1 个赞

FORCE_HTTPS 会告知 Discourse 重写请求。

即使您在容器外部执行 SSL 封装,也需要它来避免您描述的问题。

1 个赞

这取决于我们如何定义“必要”。目前,可能需要解决实际问题,即编译后的 CSS 文件显式地使用 http 协议引用静态资源。但恕我直言,从长远来看,这不应该是必要的。

必要,因为这是 FORCE_HTTPS 的目的——这样你就可以告诉 Discourse 它正在被安全地提供服务,并相应地重写链接。

那么,哪些因素/条件会影响资源的(JS/CSS)URL协议HTTP/HTTPS?

  1. 如果您注释掉以下内容,并且您的网站通过HTTP访问,那么资源URL也将是HTTP
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

在这种情况下,如果您启用了force_https,并且您请求的域名没有安装证书,您将最终遇到所有资源URL错误R_SSL_PROTOCOL_ERROR。然后,为了避免这种情况,您需要为该域名安装证书以解决SSL协议问题。

  1. 如果您取消注释上述模板来安装Discourse,那么网站的资源URL应该与您的网站基础URL协议一起使用HTTPS。此外,force https在管理员界面中是不可见的。

如原始帖子所述,在我的情况下,证书和其他一切都是正确且有效的,但所有到外部的连接都由反向代理(显然是 nginx ;-))处理,而到 discourse 的连接则通过 unix 套接字进行。这意味着我使用的是
templates/web.socketed.template.yml
而不是你提到的任何一个。尽管如此——这不应该导致静态 URL 硬编码显式的 http: 方案。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.