У меня есть 2 apache 2.2.21, один внешний и один внутренний, мне нужно сопоставить внутренний apache за путем во внешнем apache, но у меня есть проблемы с абсолютным URL-адресом.
Я пробовал эти конфигурации:
RewriteEngine on
RewriteRule ^/externalpath/(.*)$ http://internal-apache.test.com/$1 [L,P,QSA]
ProxyPassReverse /externalpath/ http://internal-apache.test.com/
или
<Location /externalpath/>
ProxyPass http://internal-apache.test.com/
ProxyPassReverse http://internal-apache.test.com/
</Location>
Мой внутренний apache использует абсолютный путь для ресурсов поиска, таких как изображения, css и html, и сейчас я не могу его изменить.
Некоторые предложения? Спасибо
Ряд альтернатив:
Один) Перепишите внутреннее приложение, чтобы использовать относительные пути вместо абсолютных.
Два) Повторно разверните внутреннее приложение в подкаталоге, а не в корне вашего внутреннего apache.
Три) Один и два часто маловероятны ... Если вам повезло, внутреннее приложение использует только два или три подкаталога, и они не используются на вашем основном сайте, просто напишите несколько строк ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://internal-apache.test.com/
ProxyPassReverse /externalpath/ http://internal-apache.test.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://internal-apache.test.com/css/
ProxyPassReverse /css/ http://internal-apache.test.com/css/
ProxyPass /icons/ http://internal-apache.test.com/icons/
ProxyPassReverse /icons/ http://internal-apache.test.com/icons/
Четыре) Создайте отдельный поддомен для внутреннего приложения и просто отмените все прокси:
<VirtualHost *:80>
ServerName app.test.com/
# Expose Internal App to the internet.
ProxyPass / http://internal-apache.test.com/
ProxyPassReverse / http://internal-apache.test.com/
</VirtualHost>
ПятьИногда разработчики совершенно невежественны и заставляют свои приложения не только генерировать абсолютные URL-адреса, но даже включать часть имени хоста в свои URL-адреса, и результирующий HTML-код выглядит так: <img src=http://internal-apache.test.com/icons/logo.png>
.
А) Вы можете использовать комбинированное решение DNS с разделенным горизонтом и сценарий 4. И внутренние, и внешние пользователи используют адрес internal-apache.test.com, но ваш внутренний DNS указывает непосредственно на IP-адрес internal-apache.test.com. сервер. Для внешних пользователей общедоступная запись для internal-apache.test.com указывает на IP-адрес вашего общедоступного веб-сервера, и затем вы можете использовать решение 4.
BФактически, вы можете получить apache не только для прокси-запросов к вашему внутреннему apache, но также переписать тело ответа, прежде чем оно будет передано вашим пользователям. (Обычно прокси перезаписывает только заголовки / ответы HTTP). mod_substitute в apache 2.2. Я не проверял, хорошо ли он сочетается с mod_proxy, но, возможно, работает следующее:
<Location /externalpath/>
ProxyPass http://internal-apache.test.com/
ProxyPassReverse http://internal-apache.test.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|internal-apache.test.com/|public-apache.test.com/externalpath/|i"
</Location>