$_SERVER["REMOTE_ADDR"]
是 PHP 中的一个超全局变量,用于获取客户端(通常是浏览器)的 IP 地址。然而,在某些情况下,这个变量可能会返回服务器的 IP 地址而不是访问者的 IP 地址。这种情况通常发生在以下几种情况:
REMOTE_ADDR
头部信息,使其指向代理服务器自身的 IP 地址。REMOTE_ADDR
头部信息,使其指向负载均衡器的 IP 地址。localhost
或 127.0.0.1
访问你的网站,REMOTE_ADDR
将会是 127.0.0.1
,即本地服务器的 IP 地址。为了获取真实的客户端 IP 地址,你可以尝试以下几种方法:
X-Forwarded-For
头部反向代理服务器通常会在请求头部添加 X-Forwarded-For
头部,其中包含了客户端的真实 IP 地址。你可以这样获取:
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip_address = $_SERVER['REMOTE_ADDR'];
}
getenv()
函数你也可以使用 getenv()
函数来获取 REMOTE_ADDR
:
$ip_address = getenv('REMOTE_ADDR');
如果你有权限配置反向代理服务器,可以在代理服务器上设置 proxy_set_header
指令,将客户端的真实 IP 地址传递给后端服务器。例如,在 Nginx 中:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header X-Real-IP $remote_addr;
}
}
然后在 PHP 中使用 X-Real-IP
头部:
if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
$ip_address = $_SERVER['HTTP_X_REAL_IP'];
} else {
$ip_address = $_SERVER['REMOTE_ADDR'];
}
获取客户端 IP 地址的应用场景非常广泛,包括但不限于:
通过以上方法,你应该能够正确获取访问者的真实 IP 地址。
领取专属 10元无门槛券
手把手带您无忧上云