У меня возникла проблема при попытке настроить apache 2.2 в качестве обратного прокси.
У меня приложение, работающее на моем внутреннем сервере http://internal.mydomain.com/App1/
, сейчас этот URL будет $ URL
, потому что я здесь новенький, и я не могу опубликовать более двух 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>
Итак, у меня вопрос, есть ли способ на лету переписать что-либо, исходящее от бэкэнда ?
ProxyPassReverse должен позволить вам исправить любые HTTP-заголовки Location, Content-Location или URI, возвращаемые внутренним сервером.
Это может быть немного сложно, когда, по желанию вашего начальника , вы ProxyPass используете другой путь URI к пути развертывания базового приложения. Гораздо более стабильно развертывать базовое приложение по новому пути (в данном случае / 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.