最近博客加了一层反向代理后,发现PHP无法获取真实IP,来源IP都变成了反向代理服务器IP,这里记录一下。
反向代理服务器配置(IP:192.168.1.2)
先在反代这一层获取客户端IP($remote_addr),然后再通过X-Real-IP传递给源站。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
源站配置
由于源站的nginx access日志也需要获取真实IP,配置如下。其中192.168.1.2
是nginx反向代理服务器的IP
#获取真实IP
set_real_ip_from 192.168.1.2;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
最后PHP获取真实IP
直接取HTTP_X_REAL_IP
参数即可,代码如下。
<?php
$ip = getenv('HTTP_X_REAL_IP');
echo $ip;
?>