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

1571
JCS81

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

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

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

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

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

1

2 ответа на вопрос

0
Brian Minton

Вы можете использовать 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 "% "! -F RewriteCond "% "! -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 7 лет назад 0
0
JCS81

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

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

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

Похожие вопросы