Apache - 反向代理和HTTP 302状态消息

Rob*_*Rob 11 apache redirect reverse-proxy http-status-code-302

我的团队正在尝试从客户的站点将Apache反向代理设置到我们的一个Web应用程序中.

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

在我们的应用程序中,我们使用struts并在某些操作上设置redirect = true以提供某些功能.来自这些重定向的302状态消息导致用户突破代理,从而导致最终用户的错误页面.

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

有没有办法在apache中设置反向代理,以便重定向正常工作?

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

Kev*_*son 13

有一篇题为" 在Apache运行反向代理 "的文章似乎可以解决您的问题.它甚至使用您的示例中的example.com和/ app1.有关如何使用ProxyPassReverse的示例,请转到"配置代理"部分.


Mar*_*evy 5

AskApache文章非常有帮助,但在实践中我发现 Rewrite 规则和 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>
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个,因为它可以让您更细粒度地控制为内部服务器代理的路径。在我们的例子中,我们只想公开第三方应用程序的一部分。请注意,这并不涉及 HTML 中的硬编码链接,AskApache 文章对此进行了介绍。

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

    ProxyPassReverse / http://internal1.example.com/some-path
    ProxyPassReverse / http://internal2.example.com/some-path
Run Code Online (Sandbox Code Playgroud)

我提到这一点只是因为我们代理的另一个第三方应用程序发送的重定向不包含其内部主机名,仅包含不同的端口。

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