如何在 nginx 中阻止 X 转发 IP

如何在 nginx 中阻止 X 转发 IP

我的网站在 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-ForHTTP 标头,则可以使用类似

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;
}

相关内容