![如何在 nginx 中阻止 X 转发 IP](https://linux22.com/image/754525/%E5%A6%82%E4%BD%95%E5%9C%A8%20nginx%20%E4%B8%AD%E9%98%BB%E6%AD%A2%20X%20%E8%BD%AC%E5%8F%91%20IP.png)
我的网站在 aws 负载均衡器后面运行。现在,如果我尝试使用 location / 下的“deny 59.92.130.106”拒绝任何 IP 访问我的网站,则不会发生任何事情。该 IP 仍然收到 200 响应。有人知道为什么会发生这种情况吗?我如何阻止在 aws 负载均衡器后面运行的 nginx 中的任何 IP?我使用了下面的条目,但它不起作用。
location / {
deny 59.92.130.106;
}
答案1
感谢大家的帮助。我找到了这个问题的解决方案。也许 nginx 中存在一些错误,导致我在 $http_x_forwarded_for 中发现双重 IP,但在 real_ip 模块的帮助下,现在我可以使用 $remote_addr 标头阻止 IP。通过在我的 vhost conf 中包含以下代码,我现在可以在 $remote_addr 标头中获取客户端 IP。
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
set $allow true;
if ($remote_addr ~ "180.179.") {
set $allow false;
}
if ($remote_addr ~ "199.47.") {
set $allow false;
}
if ($allow = false) {
return 403;
}
答案2
如果你的负载均衡器已正确配置为支持X-Forwarder-For
HTTP 标头,则可以使用类似
map $http_x_forwarded_for $block {
59.92.130.106 1;
<another_blocked_ip> 1;
...
}
server {
...
location / {
if ($block) { return 403; }
...
}
...
}
或者如果你想只允许某些 IP 访问
map $http_x_forwarded_for $block {
59.92.130.106 '';
<another_allowed_ip> '';
...
default 1;
}