【问题标题】:Django Invalid HTTP_HOST header on Apache - fix using Require?Apache 上的 Django 无效 HTTP_HOST 标头 - 使用 Require 修复?
【发布时间】:2017-01-23 14:21:04
【问题描述】:

几周前,我在设置 Apache 和 Django 配置以在强制使用 SSL 并在 AWS 负载均衡器后面运行时度过了一段美好的时光。

现在一切运行良好,但我仍然经常收到常见的“无效 HTTP_HOST 标头”错误,并试图找出修复它的正确方法。

搜索让我得到以下关于 Apache 配置的答案:

How to disable Django's invalid HTTP_HOST error?

建议将以下设置放在 VirtualHost 文件的 <Directory></Directory> 块内:

SetEnvIfNoCase Host .+ VALID_HOST
Order Deny,Allow
Deny from All
Allow from env=VALID_HOST}

这可行,但根据 Apache (https://httpd.apache.org/docs/2.4/howto/access.html),此方法已被弃用。

我已经阅读了 Apache 文档,但是当我尝试使用以下代码时,它只是关闭了对站点的访问,并给了我一个“未授权”错误。

<RequireAll>
    Require host example.org
</RequireAll>

不完全确定我错过了什么。我知道我可以使用第一个答案来解决问题,只是尝试使用未弃用的代码找出“正确”的方法。站点正在使用 WSGIDaemonProcess 运行 Django 应用程序,并具有以下设置以通过 AWS 强制 SSL

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP:X-Forwarded-For} !=""
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

【问题讨论】:

    标签: django apache amazon-web-services https


    【解决方案1】:

    不需要使用 mod_setenvif,因为 HTTP_HOST 已经是一个变量,你可以直接评估它。

    <Directory /var/www/html/>
        Require expr %{HTTP_HOST} == "example.com"
        Options
    </Directory>
    

    【讨论】:

      【解决方案2】:

      所以,在搞砸了很长时间之后,我发现我正在处理的问题可能与主机名反向 DNS 查找失败有关,因为 IP 地址指向 AWS EC2 实例而不是我的领域。

      在最终放弃做对之后,我回到了关于如何禁用日志错误的帖子,并尝试使用 env 变量,这似乎是有效的。

      显然 Require 的正确格式是:

      <Directory /var/www/html/>
          SetEnvIfNoCase Host example\.com VALID_HOST
          Require env VALID_HOST
          Options
      </Directory>
      

      这些人说得对,只需要针对当前的“Require”指令进行更新。

      How to disable Django's invalid HTTP_HOST error?

      【讨论】:

      • .ebextensions/.config 文件中这段代码之前的内容是什么?
      猜你喜欢
      • 2013-02-20
      • 2019-09-29
      • 2014-04-20
      • 2017-03-27
      • 2016-07-11
      • 2021-01-20
      • 2013-09-10
      • 1970-01-01
      相关资源
      最近更新 更多