1

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

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

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

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

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

2 ответа2

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .