0

我已配置 apache(2.4 版)反向代理以在我们的网站上发布安装在内部服务器中的应用程序。一切正常,这些是我在 proxy-html.conf 中添加的行:

ProxyPass /app/bpv0SOCPOkqptPqO6XsIvucLzO7QXJyA/ http://srvacg:9081/acgv4/

如果我写这个网址http://www.mysite.com/app/bpv0SOCPOkqptPqO6XsIvucLzO7QXJyA/我可以登录我的内部应用程序,我可以使用它。

问题是我的应用程序检查客户端的 IP 地址,并且同一时间只允许 1 个连接。配置反向代理后,所有连接都是使用安装 apache 的服务器的私有 IP 完成的。

我试图让 mod_remoteip 来解决这个问题:

RemoteIPHeader X-Forwarded-For

但结果总是一样的。这是apache访问日志:

REMOTE-IP: %a - LOCAL-IP: %A | X-Forwarded-For: %{X-Forwarded-For}i | h: %h | UNDERLYING CLIENT IP: %{c}a |

REMOTE-IP: 217.57.XXX.XXX - LOCAL-IP: 192.168.89.3 | X-Forwarded-For: 217.57.XXX.XXX | h: 217.57.XXX.XXX | UNDERLYING CLIENT IP: 217.57.XXX.XXX |

217.57.XXX.XXX是客户端ip,192.168.89.3是内部ip,是我的应用收到的ip。我不知道它是如何获得这些信息的。

有人可以帮助我吗?

4

2 回答 2

1

如果您无法根据您的要求修改该应用程序,那么也许您可以包装它?

如果您可以安装一个额外的应用程序,一个简单的包装器,而不是一个简单的脚本,您可能能够构建一个解决方法:配置代理服务器以将所有请求转发到该包装器而不是“真正的”内部应用程序。然后包装器可以代表代理服务器发出内部请求,以代理(或客户端)的方式请求“真实”应用程序并转发回复。优点:您可能能够构造一个看似源自原始远程客户端 IP 的请求,包装器可以将其视为代理服务器添加的附加标头。由于从包装器到“真实”应用程序的请求是系统内部的,因此没有包通过网络移动,因此防火墙无法阻止任何内容。

我没有尝试过,但这可能是一种解决方法......

于 2012-10-16T19:39:56.087 回答
0

由于某些原因,mod_remoteip不适用于我的实现。

相反,正如在Apache 2.4 上测试的那样,我发现这是可行的。

对于httpd.conf尝试搜索<IfModule log_config_module>所在的部分,并将 CustomLog 语句替换为:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
CustomLog "logs/access.log" proxy

LogFormat语句创建一个名为 proxy 的自定义日志格式,它使用代理转发的环境变量X-Forwarded-For作为来自真实客户端的远程 IP 地址的来源。

CustomLog语句只是使用自定义日志格式“代理”将结果写入“access.log”,而现在出现真实 IP 地址。

于 2014-03-27T01:16:48.443 回答