f71*_*316 7 apache django https amazon-web-services
几周前,我在设置 Apache 和 Django 配置的过程中度过了一段美好的时光,同时强制使用 SSL 并在 AWS 负载均衡器后面运行。
现在一切运行良好,我仍然不断收到常见的“无效的 HTTP_HOST 标头”错误,并试图找出解决它的正确方法。
搜索使我得到了有关 Apache 配置的以下答案:
建议将以下设置放在<Directory></Directory>VirtualHost 文件的块内:
SetEnvIfNoCase Host .+ VALID_HOST
Order Deny,Allow
Deny from All
Allow from env=VALID_HOST}
Run Code Online (Sandbox Code Playgroud)
这有效,但根据 Apache ( https://httpd.apache.org/docs/2.4/howto/access.html ) 不推荐使用此方法。
我已经通读了 Apache 文档,但是当我尝试使用以下代码时,它只是关闭了对该站点的访问,并给了我一个“未授权”错误。
<RequireAll>
Require host example.org
</RequireAll>
Run Code Online (Sandbox Code Playgroud)
不完全确定我错过了什么。我知道我可以使用第一个答案解决问题,只是尝试使用未弃用的代码找出“正确”的方法。站点正在使用 WSGIDaemonProcess 来运行 Django 应用程序,并设置了以下设置以通过 AWS 强制使用 SSL
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP:X-Forwarded-For} !=""
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
因此,在搞砸了很长时间之后,我发现我正在处理的问题可能与主机名反向 DNS 查找失败有关,因为 IP 地址指向的是 AWS EC2 实例而不是我的域。
在最终放弃正确处理之后,我返回了关于如何禁用日志错误的帖子,并尝试使用 env 变量,这似乎有效。
显然 Require 的正确格式是:
<Directory /var/www/html/>
SetEnvIfNoCase Host example\.com VALID_HOST
Require env VALID_HOST
Options
</Directory>
Run Code Online (Sandbox Code Playgroud)
这些人是对的,只需要针对当前的“Require”指令更新它。
无需使用 mod_setenvif,因为 HTTP_HOST 已经是一个变量,您可以直接评估它。
<Directory /var/www/html/>
Require expr %{HTTP_HOST} == "example.com"
Options
</Directory>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |