我对Nginx很新,看起来好像很混乱.我的服务器设置完美,但问题是,因为我的服务器使用HTTP代理保护; 它不是记录真实用户的IP,而是记录代理服务器IP.
我尝试做的是设置$_SERVER['REMOTE_ADDR'];,$_SERVER['X-Forwarded-For'];但我得到一个未定义的索引错误,所以我猜我必须X-Forwarded-For在Nginx中定义?但我不知道怎么做,我有一个简单的设置,它只是Nginx与PHP.没有更多,没有更少.
我在网上搜索过,但实际上找不到一些易于理解的信息.
我有权访问源代码,如果这有点帮助.我尝试了很多解决方案,但无济于事.
Raz*_*ore 15
这样做的正确方法是real_ip_header在nginx中设置配置.
可信HTTP代理IP的示例:
set_real_ip_from 127.0.0.1/32;
real_ip_header X-Forwarded-For;
Run Code Online (Sandbox Code Playgroud)
这样,$ _SERVER ['REMOTE_ADDR']将在PHP fastcgi中正确填充.
$http_x_forwared_for可能包含多个IP地址,其中第一个应该是客户端IP.REMOTE_ADDR应该只是客户端IP.
所以通过在你的regex中使用nginx.conf,你可以像这样设置REMOTE_ADDR第一个ip $http_x_forwarded_for:
set $realip $remote_addr;
if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {
set $realip $1;
}
fastcgi_param REMOTE_ADDR $realip;
Run Code Online (Sandbox Code Playgroud)
对@fredrik 的回答的补充。
设置$real_ipusingmap指令可能更好:
map $http_x_forwarded_for $real_ip {
~^(\d+\.\d+\.\d+\.\d+) $1;
default $remote_addr;
}
Run Code Online (Sandbox Code Playgroud)
然后,fastcgi_param REMOTE_ADDR在fastcgi_params文件或位置块中设置:
fastcgi_param REMOTE_ADDR $real_ip;
Run Code Online (Sandbox Code Playgroud)
编辑:在变量名称中修复了错别字
Rev*_*erb -1
我解决了我自己的问题,因为 PHP 通过 FastCGI 进行过滤,我只是添加了一个设置REMOTE_ADDR为变量的快速 CGI 参数http_x_forwarded_for,所以与此类似:
fastcgi_param REMOTE_ADDR $http_x_forwarded_for;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31713 次 |
| 最近记录: |