我在客户端的网络上有两个Windows服务器,其中一个服务器(S1)具有公共IP和端口转发请求到另一个服务器(S2)上没有公共的Apache中运行的PHP Web应用程序IP
使用PHP和Apache,S2只将传入请求的远程地址视为S1的内部IP。
我希望S2能够看到实际客户端的IP地址进行日志记录,但经过大量的搜索和调试后,我还没有能够使用它。
请求如何流入和流出系统的草图如下:
S1不使用任何应用程序(反向代理等)转发这些请求,这意味着它不能将X-FORWARDED-FOR标头(或任何其他代理标头)附加到HTTP请求。 / p>
来自$_SERVER
的{{1}}数组的截断版本如下:
我找到了这个问题,其最高答案明确提到端口转发,可能是"搞乱数据包",这似乎正是在这种情况下发生的事情。
有没有办法查看远程客户端的IP而不是S1的IP?是否有可以在Apache或PHP中设置的配置?或者它是在网络层中,因此无法在应用层解析?我不太了解网络知识,知道要搜索什么。
答案 0 :(得分:1)
如果您丢失了客户端IP,那么它实际上并不是端口转发。这听起来更像SSL终止,其中S1处理SSL并将解密的流量转发到S2。那种拦截(不是说它就是这种情况 - 只是有点类似)会导致你看到的情景。
在这种情况下,您最好的办法是找出执行转发的特定配置/技术,并将原始远程IP复制到S2的请求的环境变量中。一种简单的方法是将IP注入自定义HTTP标头,以便它显示在$ _SERVER数组中。
但具体如何实现取决于S1上的设置,因为S1正在重写数据包(IP存储在数据包头中)。