使用HTTP_X_FORWARDED_FOR获取客户端IP
2016-05-30 by dongnan
问题描述
某个业务系统使用PHP
开发,使用 $_SERVER["REMOTE_ADDR"]
来取得客户端的IP地址,发现取到的是反向代理服务器的IP
地址,而不是真正的客户端IP
地址。
环境描述
- 通过
Haporxy
反向代理Nginx
服务器。 - 数据流
Client -> Haproxy -> Nginx(PHP-FPM)
。
解决方法
如果使用了反向代理或者负载均衡器,那么程序中需要使用 "HTTP_X_FORWARDED_FOR"
变量来获得真是的客户端IP地址。
验证
以 PHP程序为例,由 REMOTE_ADDR
变量,调整为 HTTP_X_FORWARDED_FOR
变量。
PHP文件
<?php
echo $_SERVER["HTTP_X_FORWARDED_FOR"] ;
?>
访问程序
# 执行命令
curl http://zongming.net/forwarded.php
123.124.xxx.xx1