【发布时间】:2012-10-31 14:25:45
【问题描述】:
我在这里运行 Nginx 1.2.4 网络服务器,并且我在我的主机代理后面以防止 ddos 攻击。使用此代理的缺点是我需要从额外的标头中获取真实的 IP 信息。例如,在 PHP 中,通过 $_SERVER[HTTP_X_REAL_IP] 可以很好地工作。
现在,在我支持我的主机代理之前,我有一个非常有效的方法来阻止某些 IP,方法是:include /etc/nginx/block.conf 并允许/拒绝 IP。
但现在由于代理,Nginx 看到所有流量来自 1 个 IP。
我已经用--with-http_realip_module 配置了 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。
我做错了什么?
【问题讨论】:
-
只有代理访问您的站点,所以这是您看到的唯一 IP。如果你想通过 IP 阻止用户,你需要在代理上阻止他们,或者配置代理以某种方式转发真实的 ip 信息。
-
代理也这样做,否则 PHP 将无法通过 $_SERVER[HTTP_X_REAL_IP] 获取 IP 信息。所以使用我为 Nginx 安装的模块,我应该也能够获取真实的 IP 信息。