Apache的反向代理使我redirect

我已经设置了一系列Web应用程序,出于安全目的,这些应用程序只能通过本地主机直接访问,每个服务都连接到不同的端口。 为了使这些应用程序可以在外部访问,正在通过apache设置一个反向代理。 它一直运行顺利,直到今天添加另一个应用程序,这是在初始访问后转发(我不知道是通过什么方法,但我没有访问正在做redirect的代码)以“proxyHost / bar /“redirect到”proxyHost / search /“而不是”proxyHost / bar / search /“

我已经查看了我的脚本多次设置代理,并尝试了不同的方法,我已经阅读了关于在线和没有为我工作。 我现在求助于你们,如果这是一个基本的问题,或者在我的configuration中有一个明显的缺陷,我非常抱歉。 我对Apache很新。

谢谢!

这是当前configuration:

ProxyRequests Off ProxyPreserveHost On ProxyHTMLEnable On <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass /foo/ http://localhost:1234/ ProxyHTMLURLMap http://localhost:1234 /foo <Location /foo/> ProxyPassReverse http://localhost:1234/ ProxyHTMLURLMap / /foo/ ProxyHTMLURLMap /foo /foo </Location> ProxyPass /bar/ http://localhost:5678/search ProxyHTMLURLMap http://localhost:5678/ /bar <Location /bar/> ProxyPassReverse http://localhost:5678/ ProxyHTMLURLMap / /bar/ ProxyHTMLURLMap /bar /bar </Location> 

重申您的问题:

您已经安装了一个新的“后端”应用程序,并使其可在前端主机上的/bar下访问。 访问应用程序会导致redirect到/search而不是/bar/search

这通常发生是因为后端应用程序不知道您访问它的前端path的任何内容,并且它会生成绝对(相对)URL。 有几种解决这个问题的方法:

  • 某些应用程序允许您configuration生成绝对链接时将使用的基本URL。 如果可用,这是最简单的解决scheme; 您可以将基本URL设置为http://frontendhost/bar
  • 如果您无法configuration或修改应用程序,那么您将需要过滤其生成的HTML以重写链接。 这是(明确)什么mod_proxy_html是。 请注意,对于Apache 2.4而言, mod_proxy_html是[included] []作为标准模块; 对于早期版本的Apache,您需要单独安装。

mod_proxy_html 文档有一些很好的例子。

尝试像这样:

 ProxyPassReverse /bar/ http://backend.example.com/search/ 

因为ProxyPassReverse是头文件重写的内容,而您的新应用程序在后台上略有不同,因为它位于/ search下,而不是像您以前的设置

*编辑对不起,我以前没有使用mod_proxy_html,但同样适用于您的ProxyHTMLURLMap指令。 还需要从/ search映射到/ bar。