几个星期前,我在设置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}
答案 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;指令。
答案 1 :(得分:0)
无需使用mod_setenvif,因为HTTP_HOST已经是变量,您可以直接对其进行评估。
<Directory /var/www/html/>
Require expr %{HTTP_HOST} == "example.com"
Options
</Directory>