Apache 2.2 代理反向和重写

Apache 2.2 代理反向和重写

当我尝试将 apache 2.2 配置为代理反向时遇到问题。

我的后端服务器上正在运行一个应用程序http://internal.mydomain.com/App1/,目前这个 URL 将是$URL,因为我是这里的新手,我无法在我的第一个帖子中发布超过 2 个 URL。

如果在我的代理服务器上使用以下配置,一切都正常

UseCanonicalName off
UseCanonicalPhysicalPort off
ProxyPreserveHost On

ProxyPassReverseCookieDomain internal.mydomain.com external.mydomain.com

ProxyPass /App1/ $URL connectiontimeout=10 timeout=60
ProxyPassReverse /App1/ $URL

访问的 URL 是external.mydomain.com/App1/

但是我的老板希望为此设置一个不同的 URL,例如external.mydomain.com/my/app1/,所以我尝试了以下配置

UseCanonicalName off
UseCanonicalPhysicalPort off
ProxyPreserveHost On

ProxyPassReverseCookieDomain internal.mydomain.com external.mydomain.com

ProxyPass /my/app1/ $URL connectiontimeout=10 timeout=60
ProxyPassReverse /my/app1/ $URL

这应该可以工作,但是当我加载网页时,后端服务器正在回答这个问题

Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /App1/StartPage.aspx
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-UA-Compatible: IE=edge
Date: Tue, 16 Aug 2016 21:25:01 GMT
Content-Length: 144

//<html><head><title>Object moved</title></head><body>
//<h2>Object moved to <a href="/App1/StartPage.aspx">here</a>.</h2>
//</body></html>

所以,我的问题是,有没有办法动态重写来自后端的任何内容?

答案1

ProxyPassReverse 应该使您能够更正后端服务器返回的任何 Location、Content-Location 或 URI HTTP 标头。

当你的老板希望你使用与底层应用程序部署路径不同的 URI 路径进行 ProxyPass 时,这些可能会变得有点棘手。在新的路径下部署底层应用程序(在本例中为 /my/app1/)要稳定得多。如果你的老板坚持,并且您无法更改部署路径,那么您将需要不同的 ProxyPassReverse 行。如下所示:

ProxyPass /my/app1/ http://internal.mydomain.com/App1/
ProxyPassReverse /App1/ /my/app1/

如果后端服务器的 HTML 中有需要修改的链接,那么您需要升级到 Apache httpd v2.4 并使用 mod_proxy_html 或者使用 mod_sed 或 mod_substitute 来修复有问题的 URL。

相关内容