在 Docker 容器中的 PHP 应用获取客户端的真实 IP 地址,与非容器化的 PHP 应用基本一致。不过,在 Docker 环境下,你可能需要特别注意 Nginx 或其他反向代理的配置,因为它们可能会对 IP 地址进行重写。
当你在 PHP 容器中运行 web 服务时,通常会有一个反向代理如 Nginx 或者 Apache 在前面处理 HTTP 请求。在这种情况下,你需要确保反向代理正确地传递了客户端的 IP 地址。
对于 Nginx,你可以在配置文件中添加如下设置:
http {
...
map $http_x_forwarded_for $proxy_add_x_forwarded_for {
default $http_x_forwarded_for;
'' $remote_addr;
}
...
}
server {
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
这将确保 Nginx 正确地将客户端的 IP 地址传递给后端的 PHP-FPM 服务。
然后,在 PHP 中,你可以使用之前提到的函数来获取客户端的真实 IP 地址:
function get_client_ip() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
但为了更全面地处理多层代理的情况,你可能需要使用更复杂的逻辑来解析 HTTP_X_FORWARDED_FOR
头,因为它可能包含多个 IP 地址,其中第一个 IP 地址通常是原始客户端的 IP。
总之,确保你的反向代理配置正确,并且在 PHP 中使用适当的逻辑来解析和获取客户端的真实 IP 地址。
Was this helpful?
0 / 0