Я столкнулся с проблемой при попытке настроить 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-адреса.