【问题标题】:Accessing HTTP content from an HTTPS server || HTTP request blocked从 HTTPS 服务器访问 HTTP 内容 || HTTP 请求被阻止
【发布时间】:2020-03-24 14:26:56
【问题描述】:

我的 Django 应用程序当前在服务器中的 HTTPS 上运行。最近我添加了一个新功能,它可以访问另一个链接来获取 JSON 对象,即 HTTP 链接。

它在本地主机中工作正常,但是当我将它部署到服务器时,它显示以下错误。

Site was loaded over HTTPS, but requested an insecure resource http link. This request has been blocked; the content must be served over HTTPS.

有人可以建议一种解决方法来绕过这个问题,以便新功能顺利运行。

【问题讨论】:

    标签: django http https request devops


    【解决方案1】:

    此错误来自浏览器,因此无法在服务器端进行匹配。

    如果您可以控制这些外部资源,最简单的方法是启用 https。

    下一个解决方法是为您的 http 资源添加一个代理并将此代理设为 https。例如,您可以将带有 proxy_pass 的简单 nginx 服务器添加到您的 http 服务器,并在该代理的 nginx 上添加 https。

    请注意,如果您正在谈论的这个 JSON 包含任何敏感的、安全方面的内容,那么您真的应该通过 https 而不是通过我上面描述的代理解决方法来提供它。如果没有提供任何敏感信息,解决方法可能没问题。

    由于您可以控制您的 http 服务器,因此只需在 nginx 上允许 ssl 代理,其配置可能如下所示:

    server {
      listen 443;
      server_name my.host.name;
      ssl_certificate       /path/to/cert;
      ssl_certificate_key   /path/to/key;
    
      location / {
        proxy_pass http://localhost:80;
      }
    }
    

    注意,如果您使用的是 AWS / GCP / Azure 之类的东西 - 您可以在负载均衡器端而不是 nginx 上执行此操作。 否则,您可以使用letsencrypt获取实际证书并为您自动配置nginx。

    【讨论】:

    • 感谢您的回答。数据不敏感。关于解决方法,您希望我将 nginx_reverse_proxy 添加到 http 的服务器吗?
    • 您可以旋转一个全新的服务器(使用任何域名)并将 proxy_pass 指向您的 http 服务器 - 如果您无法控制现有服务器。或者,如果您可以控制 http 服务器,则可以直接在该服务器上进行操作。
    • 我可以控制 http 服务器。 proxy_pass 和 nginx_reverse_proxy 一样吗?
    • 反向代理是实际发生的过程的名称。而 proxy_pass 是 nginx 的具体配置指令。我更新了答案以包含示例配置和更多细节。
    猜你喜欢
    • 2015-12-17
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多