2014-02-06 27 views
5

案例:护协议和端口号从反向代理请求

用户请求https://api.abc.com

这是反向代理(阿帕奇2.2)到内部服务器服务器在http://internal.abc.com:123

作为每Retain original request URL on mod_proxy redirect,通过添加:

ProxyPreserveHost On 

to httpd.conf,internal.abc.com当前识别出原始请求EST网址为:

http://api.abc.com:123

有什么办法,我恢复的https://api.abc.com原来的网址是什么?也就是说,还保留原来的协议(HTTP)和端口(80或空的也没事)

+0

嗨ChaimKut,你找到解决方案吗?如果是,你可以分享吗?谢谢 – Daniyar

回答

1
ProxyRequests Off 
ProxyPreserveHost On 

ProxyPass/http://internal.abc.com:123 
ProxyPassReverse/http://internal.abc.com:123 

从我在我自己的envoirment测试此代码,应该采取internal.abc.com:123和将其隐藏到您将代码添加到<虚拟主机>括号中的任何网址中。

如果它的api.abc.com它应该代理从internal.abc.com:123到api.abc.com的信息,而没有其后面的端口号。 ProxyPassReverse为你做这件事。

+0

问题不在于如何代理。让我们假设代理工作(使用类似于您所建议的解决方案)。问题是反向代理(hostname'internal')后面的机器如何知道原始用户请求使用的端口和协议。 – ChaimKut

+0

所有的数据通常转发,例如我用这个WordPress的管理项目。它会通过所有的登录和cookie信息给我。我看到大多数人使用它似乎将它用于不同端口上的tomcat,但使用proxypass在内部隐藏它。 – alexj

+0

是的,确实是登录和Cookie传递。我的问题是,我没有看到原始请求的协议(https,我们说)和端口也被传递。 – ChaimKut

2

我解决这个问题的方法是在我的虚拟主机文件中添加一个头文件。 RequestHeader set original-protocol-ssl true early

然后,您需要在代码中检查此标题以确定它来自哪里。