我已经设置了一系列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。 有几种解决这个问题的方法:
http://frontendhost/bar 。 mod_proxy_html是[included] []作为标准模块; 对于早期版本的Apache,您需要单独安装。 mod_proxy_html 文档有一些很好的例子。
尝试像这样:
ProxyPassReverse /bar/ http://backend.example.com/search/
因为ProxyPassReverse是头文件重写的内容,而您的新应用程序在后台上略有不同,因为它位于/ search下,而不是像您以前的设置
*编辑对不起,我以前没有使用mod_proxy_html,但同样适用于您的ProxyHTMLURLMap指令。 还需要从/ search映射到/ bar。