Powered by Typecho)))
Optimized by EAimTY
程序在进过nginx<nginx<apache这样的调度器后,无法获取客户端真实ip。
大家在开发过程中,如果需要获取用户的真实IP,需先判断X-FORWARDED-FOR是否存在,如果存在此header,则优先取这个值.获取逻辑大致如下:
(注意,经过多层代理后,X-Forwarded-For 字段可能包含多个IP,格式如下: X-Forwarded-For: clientIp, proxy1, proxy2 )
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip=$_SERVER['REMOTE_ADDR'];
}
解决办法:
在最靠近用户层的nginx上,设置一下header
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
解决办法:在最靠近应用程序后端的nginx上,通过以下header信息
proxy_pass_header X-Real-IP;
proxy_pass_header X-Forwarded-For;
real_ip_header X-Forwarded-For;