Django Apache上的HTTP_HOST标头无效 - 使用Require修复?

时间:2016-09-15 14:01:41

标签: django apache amazon-web-services https

几个星期前,我在设置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 App并具有以下设置以强制通过AWS进行SSL

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

2 个答案:

答案 0 :(得分:2)

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

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

显然,Require的正确格式是:

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

这些家伙说得对,只需更新当前的&#34;要求&#34;指令。

How to disable Django's invalid HTTP_HOST error?

答案 1 :(得分:0)

无需使用mod_setenvif,因为HTTP_HOST已经是变量,您可以直接对其进行评估。

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