ProxyPassMatch с ProxyPassReverse
люди, Мы пытаемся настроить обратный прокси-сервер Apache для следующего сценария:
- входящие запросы принимают форму
http://foo.com/APP/v1/main.html
- для некоторых серверов URL будет ссылаться на разную версию, скажем,
http://foo.com/APP/v2/main.html
- вышестоящий балансировщик нагрузки (HAProxy) отправит запрос на правый сервер, который будет иметь обратный прокси-сервер Apache2 перед сервером JBoss.
- когда запрос появляется в Apache 2, он будет иметь запрос путь как
/APP/v1/main.html
- мы хотим, чтобы он (обратный) прокси-сервер
http://localhost:8080/AppContext/main.html
, независимо от фрагмента версии в URL (v1, v2 и т. д.).
Я пытался сделать это так:
ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/
ProxyPassReverse /APP http://localhost:8080/AppContext
мои вопросы:
- мне
ProxyPassMatch
исправить? - мой
ProxyPassReverse
- это "статика". Как я могу сделать его осведомленным о потенциально переменном материале после/APP
?
Спасибо за любую интуиция.
-Радж
1 ответов
вы близки, попробуйте немного изменить регулярное выражение, чтобы учесть фрагмент версии:
ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/
на ProxyPassReverse
в основном для обеспечения перезаписи на лету полей заголовка местоположения в ответах, данных проксированным приложением. Поэтому когда он возвращает 301 редирект, скажем, http://localhost:8080/AppContext/something
, apache знает, чтобы изменить его на /APP/v1/something
информация за прокси не вляпаться. Поскольку у вас есть динамический URL, используемый в обратном прокси, у вас есть несколько вариантов. Вы можете либо отправить это к балансировщику нагрузки HAProxy (не уверен, где это для вас), или вы можете просто выбрать один и надеяться на лучшее. Например, если у вас есть балансировщик нагрузки на /APP/balancer/
, который затем отправляет запросы /APP/v1/
, /APP/v2/
, /APP/v3/
, etc. Тогда вы можете сделать следующее:
ProxyPassReverse /APP/balancer http://localhost:8080/AppContext
в противном случае вы можете просто указать на него и надеяться на лучшее:
ProxyPassReverse /APP/v1 http://localhost:8080/AppContext