我已经将以下内容添加到我的 nginx 配置中以处理欺骗域:
if ($host !~* ^(.*example.org|\d+\.\d+\.\d+\.\d+)$ ) {
return 444;
}
现在它将 IP 地址列入白名单,因为我需要接受它们的某些请求。
这是在 AWS ELB 后面,因此它也需要响应 IP 地址。
理想情况下,我希望它只接受自己的公共 IP 地址和自己的私有 IP 地址。但是,我不想将其硬编码到配置中,因为这些是 AWS 实例。
所以我想知道是否有人想出了阻止欺骗主机头的解决方案,该解决方案专门限制所需的 IP。
我能想到的最好的办法是编写一个脚本来生成配置文件,在启动时添加正确的 IP,然后将它们复制到 nginx 配置文件夹中。但我觉得一定有一个更优雅的解决方案,不需要我编写启动脚本。
原因
因为有人问我为什么要这样做,我基本上有两个目标:
- 消除由于 HOST_HEADER SuspiciousOperation 错误而收到的 Django 错误
- 防止机器人(占这些欺骗请求的 99.9%)到达我的 Web 应用层。
答案1
您最好的选择确实是生成一个配置文件部分并将其包含在内,因为如果没有它,nginx 就无法知道主机头中的授权 IP。
server {
listen 80;
server_name mypublicdomain.com anotherdomain.com;
include conf.d\domain-ips;
[ ... ]
}
domain-ips 文件包含:
server_name x.x.x.x; # Public IP
server_name x.x.x.x; # Private IP