Apache ProxyPass по динамическому имени хоста
Я пытаюсь настроить Apache для прокси на внутренний сервер на основе динамических имен хостов и с использованием других портов. Это кажется слишком сложным для меня. Вот что у меня есть:
<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>
Но это (очевидно) не динамично. Я работал над правилами переписывания и т. Д., Но мне не удалось заставить его работать. Что мне действительно нужно, это что-то вроде:
^/[internalservername]/awesomewebapp
proxy internally to
http://[internalservername]:8080/awesomewebapp
заранее спасибо
2 ответа
Мое предыдущее "решение" все еще не работало должным образом, поэтому я удалил его, чтобы избежать путаницы. Кажется, это не возможно так, как я хочу, но небольшой обходной путь, использующий поддомен вместо подкаталога, по-прежнему заставляет его работать.
RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]
Источник: http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html
Вы можете использовать RewriteRule для прокси запроса. Документация apache для использования mod_rewrite в качестве прокси показывает следующее:
Описание:
mod_rewrite предоставляет флаг [P], который позволяет передавать URL-адреса через mod_proxy на другой сервер. Два примера приведены здесь. В одном примере URL-адрес передается непосредственно на другой сервер и обрабатывается так, как если бы он был локальным URL-адресом. В другом примере мы пропускаем пропущенный контент на внутренний сервер.
Решение:
Чтобы просто сопоставить URL-адрес с другим сервером, мы используем флаг [P] следующим образом:
RewriteEngine на RewriteBase "/ products /" RewriteRule "^ widget /(.*)$" " http://product.example.com/widget/$ 1" [P] ProxyPassReverse "/ products / widget /" " http://product.example.com/widget/"
Во втором примере мы проксируем запрос, только если не можем найти ресурс локально. Это может быть очень полезно при переходе с одного сервера на другой, и вы не уверены, что весь контент уже перенесен.
RewriteCond "%{REQUEST_FILENAME}"!-F RewriteCond "%{REQUEST_FILENAME}"!-D RewriteRule "^ / (. *)" " http://old.example.com/$ 1" [P] ProxyPassReverse "/" " http://old.example.com/"
Второй пример, условная перезапись URL-адресов с флагом [P] для прокси-запроса, похоже на то, что вам нужно.