在Nginx中,根据X头值阻止用户

负载平衡器后面有6个Nginx服务器。 当然,如果我只是试图根据IP地址进行“拒绝”,它就不能像应用服务器那样工作,只能看到负载平衡器IP。

不过,我了解了真正的IP模块,我已经启用了以下方式:

set_real_ip_from 0.0.0.0/0; real_ip_header X-Real-IP; 

那么,现在我已经正确设置了X-Real_IP头,那么如何configurationNginx来阻止某些“X-Real-IP”值等于一组IP的用户呢?

这很容易。 Nginx的“geo”模块可以根据客户端的IP地址定义一个值,

 geo $ban_ip { default 0; 10.1.0.0/24 1; }; 

geo指令应该在http级别(例如server外部)。 有一个方便的方法来通过includeranges包含大型IP数据库,请参阅文档

所以,假设你有这样一个variables,你可以返回你想要的任何状态代码,例如403或404(在server级别或location ):

 if ($ban_ip) { return 403; } 

如果您想静静放弃连接,请使用

 if ($ban_ip) { return 444; } 

444是一个非标准的状态码,用于指示Nginx删除连接。 (因此客户端看不到)

nginx有一个名为naxsi的应用程序防火墙第三方模块 ,我认为它可以解决这个问题。