前言
编写代码多年,复制粘贴过多。这里复习一个知识点
问题
在一个场景中,我需要获取用户的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
另外还需要注意,只有经过代理的请求会存在该参数。没有经过代理的会缺少。
网友评论