当我尝试将apache 2.2configuration为代理服务器时,我遇到了一个问题。
我有一个应用程序运行在我的后端服务器http://internal.mydomain.com/App1/ ,现在这个URL将成为$URL ,因为我是一个新人在这里,我无法在我的第一篇文章发布超过2个url。
如果在我的代理服务器上,我使用下面的configuration一切工作正常
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/ ,所以我尝试了以下configuration
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>
所以,我的问题是,有没有办法在后台重写任何东西?
ProxyPassReverse应使您能够更正由后端服务器返回的任何位置,内容位置或URI HTTP标头。
当你的老板想要的时候,这些可能会变得有点棘手,你ProxyPass使用不同的URIpath到底层应用程序的部署path。 在新path下(/ my / app1 /在这种情况下)部署底层应用要稳定得多。 如果你的老板坚持 ,你不能改变部署path,那么你将需要一个不同的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。