【发布时间】:2016-12-10 22:19:06
【问题描述】:
问题是我的以下站点结构中没有设置 PHP 字段 $_SERVER['HTTP_CLIENT_IP'],我应该如何更正?
Docker 桥接网络(位于 cloudflare 后面的主机上)名为“back”的静态 IP 容器:
- NGINX 在容器 (172.24.02) 中运行
- 容器中的 Apache + PHP (172.24.0.3)
nginx.conf:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.24.0.3;
}
test.php
<?php
echo('HTTP_CLIENT_IP: '.$_SERVER['HTTP_CLIENT_IP']);
echo('<br>HTTP_X_FORWARDED_FOR'.$_SERVER['HTTP_X_FORWARDED_FOR']);
echo('<br>REMOTE_ADDR'.$_SERVER['REMOTE_ADDR']);
echo('<br>HTTP_X_FORWARDED'.$_SERVER['HTTP_X_FORWARDED']);
echo('<br>HTTP_FORWARDED'.$_SERVER['HTTP_FORWARDED']);
echo('<br>HTTP_FORWARDED_FOR'.$_SERVER['HTTP_FORWARDED_FOR']);
?>
运行上述结果:
HTTP_CLIENT_IP:
HTTP_X_FORWARDED_FOR:
REMOTE_ADDR: 172.24.0.2
HTTP_X_FORWARDED:
HTTP_FORWARDED:
HTTP_FORWARDED_FOR:
【问题讨论】:
-
如何将 Nginx 和 Apache 配置为协同工作?
-
HTTP_CLIENT_IP 不是标准标头,REMOTE_ADDR 是 IP 的标准,但在代理情况下,您需要设置标头。为什么不打印出所有标题
print_r($_SERVER),而不是尝试打印不一定与正在定义的标题对齐的标题。 -
@Devon Apache 在一个容器中的 80 端口上运行,nginx 只是将请求转发给它并使用上述配置传递标头。我将尝试您的建议重新打印出整个变量
标签: php nginx docker cloudflare