Apache ProxyPass по динамическому имени хоста

1

Я пытаюсь настроить Apache для прокси на внутренний сервер на основе динамических имен хостов и с использованием других портов. Это кажется слишком сложным для меня. Вот что у меня есть:

<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>

Но это (очевидно) не динамично. Я работал над правилами переписывания и т. Д., Но мне не удалось заставить его работать. Что мне действительно нужно, это что-то вроде:

^/[internalservername]/awesomewebapp
      proxy internally to
http://[internalservername]:8080/awesomewebapp

заранее спасибо

JCS81
источник

Ответы:

0

Вы можете использовать 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] для прокси-запроса, похоже на то, что вам нужно.

Брайан Минтон
источник
Работал с этим, но похоже, что ProxyPassReverse удаляет хост из URL. Теперь полный URL-адрес «http: // [publicdomain] / [internalhostname] / awesomewebapp» перенаправляет на «http: // [internalhostname] / awesomewebapp» правильно, но затем публично возвращается как «http: // [publicdomain] / awesomewebapp». msgstr "без внутреннего имени хоста в пути.
JCS81
0

Мое предыдущее «решение» все еще не работало должным образом, поэтому я удалил его, чтобы избежать путаницы. Кажется, это не возможно так, как я хочу, но небольшой обходной путь, использующий поддомен вместо подкаталога, по-прежнему заставляет его работать.

RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]

Источник: http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html

JCS81
источник