跳转至

使用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

参考

nginx http_x_forwarded_for 变量

回到页面顶部