2008-10-09 91 views
11

我的团队正在尝试将客户站点的Apache反向代理设置为我们的一个Web应用程序。Apache - 反向代理和HTTP 302状态消息

http://www.example.com/app1/some-path映射到http://internal1.example.com/some-path

里面我们的应用中使用Struts和具有重定向=某些行动真正集,以提供特定的功能。来自这些重定向的302状态消息导致用户跳出代理,导致最终用户出现错误页面。

HTTP/1.1 302找到 地点:http://internal.example.com/some-path/redirect

有没有办法设置在apache的反向代理,以便正常进行重定向?

http://www.example.com/app1/some-path/redirect

回答

1

尝试使用AJP连接代替反向代理的。当然不是一个小小的改变,但我发现,当使用AJP而不是反向代理时,很多URL恶梦消失了。

+0

我花了3个小时试图找到一种可靠的方法来阻止http重定向通过没有AJP的https代理。我最终通过在ProxyPass和ProxyPassReverse指令中使用ajp而不是http来解决此问题。 – Gnafu 2017-04-06 10:30:50

2

AskApache article是相当有用的,但实际上我发现重写规则和ProxyPassReverse的组合更加灵活。所以你的情况我会做这样的事情:

<VirtualHost example> 
     ServerName www.example.com 

     ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/ 
     RewriteEngine On 
     RewriteRule /app1/(.*) http://internal1.example.com/some-path$1 [P] 

     ... 
    </VirtualHost> 

我喜欢这个更好,因为它让你在你进行代理的内部服务器的路径更细粒度的控制。在我们的案例中,我们只想公开部分第三方应用程序。请注意,这并不涉及HTML中的硬编码链接,AskApache文章涵盖了这些链接。

另外请注意,你可以有多个ProxyPassReverse行:

ProxyPassReverse/http://internal1.example.com/some-path 
    ProxyPassReverse/http://internal2.example.com/some-path 

我提到这一点,只是因为其他第三方应用程序我们进行代理被发出重定向,不包括其内部的主机名,只是一个不同的港口。

作为最后一点,请记住Firebug在调试重定向时非常有用。