Обратный прокси-сервер Apache 2.2 и перезапись

У меня возникла проблема при попытке настроить 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>

Итак, у меня вопрос, есть ли способ на лету переписать что-либо, исходящее от бэкэнда ?

2
задан 17 August 2016 в 01:21
1 ответ

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.

0
ответ дан 3 December 2019 в 14:22

Теги

Похожие вопросы