反向代理后,php获取客户端真实IP

Nginx/Apache反向代理后,在应用中取得的IP都是反向代理服务器的IP,取得的域名也是反向代理配置的URL的域名,解决该问题,需要在Nginx/Apache的反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中。

 

几种获取IP的方法和说明

  1. 没有使用代理服务器的PHP获取客户端IP情况: REMOTE_ADDR = 客户端IP HTTP_X_FORWARDED_FOR = 没数值或不显示

  2. 用户使用代理或者服务器反向代理(例如Nginx等反向代理)
    REMOTE_ADDR = 最后一个代理服务器 IP
    HTTP_X_FORWARDED_FOR = 客户端真实 IP
    这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的。

  3. 使用普通匿名代理服务器的PHP获取客户端IP情况:Anonymous Proxies REMOTE_ADDR = 最后一个代理服务器 IP
    HTTP_X_FORWARDED_FOR = 代理服务器 IP
    这种情况下隐藏了客户端的真实IP,但是向访问对象透露了客户端是使用代理服务器访问它们的。

PHP实现代码如下:

    ```
        /*** 获取客户端真实ip
        * @return IP
        /
        public static function getClientIP(){
                $ip = "unknown";
                /*
                * 访问时用localhost访问的,读出来的是“::1”是正常情况。
                * ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。
                * 使用ip地址访问或者关闭ipv6支持都可以不显示这个。
                * */
                if (isset($_SERVER)) {
                        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
                                $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
                        } 
                        elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {
                                $ip = $_SERVER["HTTP_CLIENT_ip"];
                        } else {
                                $ip = $_SERVER["REMOTE_ADDR"];
                        }
                } else {
                        if (getenv('HTTP_X_FORWARDED_FOR')) {
                                $ip = getenv('HTTP_X_FORWARDED_FOR');
                        } elseif (getenv('HTTP_CLIENT_ip')) {
                                $ip = getenv('HTTP_CLIENT_ip');
                        } else {
                                $ip = getenv('REMOTE_ADDR');
                        }
                }

                if(trim($ip)=="::1"){
                        $ip="127.0.0.1";
                }
                        return $ip;
        }

``` 打开浏览器,检查是否已获取成功。

本文作者:肖云

本文链接:http://www.d7dd.com/2019/4/proxy-clientip

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

Apache Potentially Vulnerable to Slowloris Denegation of Service
0 条评论
已登录,注销 取消