需修改phpEnv的C:\phpEnv\nginx\conf\vhosts\your-site.conf,在location块中proxy_pass上方添加三行proxy_set_header指令,并在PHP中优先读取$_SERVER['HTTP_X_REAL_IP']而非REMOTE_ADDR。

phpEnv 本身不管理 Nginx 配置,你得直接改它内置的 Nginx 配置文件;否则后端 PHP 拿到的永远是 127.0.0.1 或内网 IP。
在哪改 phpEnv 的 Nginx proxy_set_header
phpEnv 是 Windows 下的集成环境,其 Nginx 配置文件路径固定:
-
C:\phpEnv\nginx\conf\vhosts\your-site.conf(虚拟主机配置,优先改这里) - 或全局配置:
C:\phpEnv\nginx\conf\nginx.conf(不推荐,影响所有站点)
找到对应 location / 块(或 location ~ \.php$),在 proxy_pass 指令上方插入以下三行:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
注意:$proxy_add_x_forwarded_for 会自动追加真实 IP,比写死 $remote_addr 更安全,尤其当你未来加 CDN 或 WAF 时。
为什么 PHP 还是拿到 127.0.0.1?
常见原因不是 Nginx 没传,而是 PHP 没读对头。检查你的 PHP 代码是否这样取 IP:
- ❌ 错误:用
$_SERVER['REMOTE_ADDR']—— 它只返回 TCP 连接来源(即 Nginx 本机) - ✅ 正确:优先读
$_SERVER['HTTP_X_REAL_IP'], fallback 到$_SERVER['HTTP_X_FORWARDED_FOR']的第一个非私有 IP
示例逻辑(不依赖扩展):
$ip = $_SERVER['HTTP_X_REAL_IP'] ?? null;
if (!$ip && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = array_map('trim', explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
foreach ($ips as $candidate) {
if (!filter_var($candidate, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
continue;
}
$ip = $candidate;
break;
}
}
phpEnv 环境下 real_ip_module 不可用怎么办
Windows 版 phpEnv 自带的 Nginx 通常**不编译 ngx_http_realip_module**,所以别折腾 set_real_ip_from 和 real_ip_header——它们会直接报错“unknown directive”。
这意味着你只能依赖后端主动解析请求头,不能让 Nginx 替你“覆盖”$remote_addr。因此必须确保:
- 前端没有其他代理(如 IIS、Apache)插在 phpEnv 和用户之间;否则
X-Forwarded-For可能被伪造 - 如果确实有多层代理,且你控制上游(比如自己搭了另一层 Nginx),那上游也得配好
proxy_set_header X-Forwarded-For,并确保只追加、不覆盖
重载 Nginx 后仍不生效的排查点
改完配置别直接双击重启,容易忽略错误:
- 先命令行验证:
C:\phpEnv\nginx\nginx.exe -t,看是否输出successful - 再重载:
C:\phpEnv\nginx\nginx.exe -s reload(不是 stop + start) - 查 Nginx access log,确认日志里
$http_x_real_ip字段有没有值(需在log_format中显式添加) - 用
curl -H "X-Real-IP: 1.2.3.4" http://localhost/your-script.php手动测试头是否透传到底层 PHP
最易被忽略的是:phpEnv 的 Nginx 默认不记录自定义 header 到日志,你得手动改 log_format 才能看到传递效果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











