美文网首页
php获取用户真实ip地址

php获取用户真实ip地址

作者: 有时右逝 | 来源:发表于2020-03-02 15:04 被阅读0次

前言

编写代码多年,复制粘贴过多。这里复习一个知识点

问题

在一个场景中,我需要获取用户的ip地址。

解决

php 获取ip地址,主要是读取 $_SERVER

$_SERVER["REMOTE_ADDR"] 浏览网页的用户ip

这个值,从哪里获取的?是否可以修改?

答案是: 该值是由php的web组件提供,在lnmp中 ,可以通过 nginx 里设置和修改

查看nginx的默认站点配置文件 default.conf
其中代码

location ~ \.php$ {
        root           /www/web;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  /www/web/$fastcgi_script_name;
        fastcgi_param REMOTE_ADDR $remote_addr;
    }

其中 fastcgi_param REMOTE_ADDR $remote_addr;表示将 将nginx的变量 $remote_addr 传递给php数组 $_SERVER["REMOTE_ADDR"]
通常该配置无需手动配置,已经默认加载

如果存在代理服务,则ip不是用户的真实ip地址,而是代理服务器的ip.

解决存在代理的问题

代理服务器nginx配置

server {
    listen 80;
    server_name _;
    location / {
        ..................
        proxy_pass         http://127.0.0.1:8000/;
        proxy_set_header   X-Real-IP        $remote_addr;                       
    }
}

业务nginx配置

location ~ \.php$ {
        root           /www/web;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  /www/web/$fastcgi_script_name;
    }

此时可以通过

$_SERVER["HTTP_X_REAL_IP"] 获取真实ip地址。

注意 索引的差异。设置的是 X-Real-IP 在php中获取是是 HTTP_X_REAL_IP

另外还需要注意,只有经过代理的请求会存在该参数。没有经过代理的会缺少。

相关文章

网友评论

      本文标题:php获取用户真实ip地址

      本文链接:https://www.haomeiwen.com/subject/nxzmkhtx.html