2012-10-15 184 views
0

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

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。我无法知道它是如何得到这些信息的。

有人可以帮我吗?

+0

也许你可以简单地扩展你的应用程序的这种情况?如果存在X-Forwarded-For头,请检查该IP地址,而不是正常的请求IP? – arkascha

+0

Arkasha,对不起但我不能,应用程序是一个管理软件,我不能把它放在它!谢谢 – fonta7

+0

好吧,无论“管理软件”是什么,我明白你无法修改它的行为细节。通过初始化客户端地址来替换代理服务器的IP地址是不可能的,虽然它可能能够伪造(或“构建”)这样的包:希望你的防火墙会阻止这样的请求,因为它们似乎来自外部IP地址... – arkascha

回答

1

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

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

我没有尝试这一点,但它可能是一个解决办法...

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语句创建一个名为代理自定义日志格式利用代理转发的环境变量X-Forwarded-For作为来自真实客户端的远程IP地址的来源。

CustomLog声明只是使用自定义日志格式“代理”将结果写入“访问”。日志“,而真正的IP地址现在出现。

+0

我也遇到麻烦让mod_remoteip工作,但我终于弄明白了,我在这里发布它:http:// stackoverf low.com/questions/25455731/getting-apache-2-4-access-logs-to-show-client-ip-instead-of-127-0-0-1-with-varni – curiouser