我在 apache 反向代理后面运行 apache web 服务器。我遇到的问题是,如果我在后端服务器中放入一个包含答案的 php 文件,<?php echo '<pre>Server IP: '; print_r($_SERVER['SERVER_ADDR']); echo '</pre>'; ?>
我得到的答案是内部 ip (192.168.1.20),而不是代理的外部 ip。有什么提示吗?
答案1
$_SERVER['SERVER_ADDR']
是php解释器自己设置的字段,设置为:
当前脚本正在执行的服务器的 IP 地址。
来源:关联
因此,您的 php 脚本假定该变量中的是公共 IP(这是错误的 - 该脚本需要修改,因为许多 Web 服务器不监听公共 IP 地址 - 并且该字段包含 Web 服务器绑定的 IP 地址,该地址可以是私有地址!),并且您无法更改脚本的源代码。
在这种情况下,您有两个选择:
- 删除反向代理,以便你的主 Web 服务器绑定到公共 IP 地址
- 更改 php 解释器的源代码,以便在 php.ini 文件内部进行设置以将此变量“设置”为字符串设置。
但除非您是软件开发人员并且真正了解自己在做什么,否则我真的不建议采用第二种选择。
抱歉,但根本没有其他选择,因为您排除了任何其他可用选项……