Назад | Перейти на главную страницу

Прокси-сервер 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>

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

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-адреса.