Я пытаюсь настроить Apache для проксирования на внутренний сервер на основе динамических имен хостов и использования других портов. Это кажется мне немного сложным. Вот что у меня есть:
<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>
Но это (очевидно) не динамично. Я работал над правилами переписывания и т. д., но мне не удалось заставить это работать. Что мне действительно нужно, так это что-то вроде:
^/[internalservername]/awesomewebapp
proxy internally to
http://[internalservername]:8080/awesomewebapp
заранее спасибо
решение1
Вы можете использовать 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] для проксирования запроса — похоже, то, что вам нужно.
решение2
Мое предыдущее "решение" все еще не работало как следует, поэтому я удалил его, чтобы избежать путаницы. Кажется, это невозможно так, как я хочу, но небольшой обходной путь с использованием поддомена вместо подкаталога все еще заставляет его работать.
RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]
Источник:http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html