我在这里运行一个Nginx 1.2.4networking服务器,并且支持我的主机代理防止ddos攻击。 在这个代理背后的缺点是,我需要从额外的头部获得真正的IP信息。 在PHP中,例如,通过执行$_SERVER[HTTP_X_REAL_IP]
,效果很好。
现在在我的主机代理的背后,我有一个非常有效的方法来阻止某些IP的这样做: include /etc/nginx/block.conf
并允许/拒绝那里的IP。
但是现在由于代理,Nginx会看到来自1个IP的所有stream量。
我用--with-http_realip_module
configuration了Nginx,所以我现在应该可以从人们那里得到真正的IP。
在我的nginx.conf中,我添加了:
real_ip_header X-Forwarded-For; include blockips.conf;
我也试过了:
real_ip_header X-Real-IP; include blockips.conf;
在这两种情况下,blockips.conf中列出的IP都没有被阻塞。 同样在我的日志文件中,我没有看到真正的IP,但只有代理IP显示出来。
我究竟做错了什么?
我解决了它。
必须补充:
set_real_ip_from 0.0.0.0;
其中IP 0.0.0.0
是代理
确保你已经启用了http://nginx.org/en/docs/http/ngx_http_realip_module.html
set_real_ip_from 123.123.255.0;
或针对一系列IP:
set_real_ip_from 123.123.255.0/255;
其中IP 123.123.255.0
是代理IP / IP
小心 :设置set_real_ip_from 0.0.0.0/0;
可能是一个潜在的安全问题,因为它将允许任何传入的请求与标题,如X-Forwarded-For
设置真正的IP。 即使在特殊情况下这可能是有用的,但几乎可以肯定的是,在nginx中创建了一个ip阻塞的规避方法。 感谢@phylae在他的评论中澄清。