Apache ReverseProxy 和外部 IP

Apache ReverseProxy 和外部 IP

我在 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 文件内部进行设置以将此变量“设置”为字符串设置。

但除非您是软件开发人员并且真正了解自己在做什么,否则我真的不建议采用第二种选择。

抱歉,但根本没有其他选择,因为您排除了任何其他可用选项……

相关内容