Apache 从反向代理请求中保留协议和端口号

Apache 从反向代理请求中保留协议和端口号,apache,apache2,reverse-proxy,httpd.conf,mod-proxy,Apache,Apache2,Reverse Proxy,Httpd.conf,Mod Proxy,案例: 用户请求 这是反向代理(Apache 2.2)到位于的内部服务器 根据,加入: ProxyPreserveHost On 对于httpd.conf,internal.abc.com当前将原始请求url识别为: 我有没有办法恢复的原始URL?也就是说,保留原始协议(http)和端口(80或空也可以) 我在自己的环境中测试的这段代码应该是internal.abc.com:123,并将其隐藏到括号中添加代码的url中 如果它的api.abc.com,它应该将internal.abc.com

案例:

用户请求

这是反向代理(Apache 2.2)到位于的内部服务器

根据,加入:

ProxyPreserveHost On
对于httpd.conf,internal.abc.com当前将原始请求url识别为:

我有没有办法恢复的原始URL?也就是说,保留原始协议(http)和端口(80或空也可以)

我在自己的环境中测试的这段代码应该是internal.abc.com:123,并将其隐藏到括号中添加代码的url中


如果它的api.abc.com,它应该将internal.abc.com:123中的信息代理给api.abc.com,而不带端口号。ProxyPassReverse可以为您执行此操作。

我解决此问题的方法是在虚拟主机文件中添加一个头。 RequestHeader提前设置原始协议ssl true


然后,您需要在代码中检查此标头以确定其来源。

问题不在于如何代理。让我们假设代理可以工作(使用与您建议的解决方案类似的解决方案)。问题是反向代理(主机名为“internal”)后面的机器如何知道原始用户请求使用的端口和协议。所有数据通常都会转发过来,例如我在wordpress管理项目中使用了这一点。它会为我传递登录和cookie信息。我看到的大多数人使用它似乎是在另一个端口上对tomcat使用它,但使用proxypass在内部隐藏它。是的,登录和cookie确实是传递的。我的问题是,我没有看到原始请求的协议(比如https)和端口也被传递。嗨,ChaimKut,你找到解决方案了吗?如果是的话,你能分享一下吗?谢谢
ProxyRequests Off
ProxyPreserveHost On

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