Прокси-сервер Apache с использованием переменной URL с интерполяцией - PullRequest
6 голосов
/ 03 января 2011

Я пытаюсь настроить сервер Apache для тестирования. Цель состоит в том, чтобы смоделировать балансировщик нагрузки. Часть, которую мы пытаемся смоделировать, это просто принять защищенный httprequest клиента и передать его (через незащищенный http) на правильный сервер с помощью proxypass. Это все работает на 100%.

Проблема заключается в следующем: я хочу использовать этот «балансировщик нагрузки» для нескольких сред разработки. Чтобы иметь возможность тестировать приложения на стороне сервера, я хочу, чтобы proxypass использовал переменный URL для передачи, являющийся IP-адресом клиента. Это потребует использования переменной URL в правиле прокси-сервера. Я нашел переменную REMOTE_ADDR, но я не могу использовать это в правиле proxypass. Сначала я попробовал синтаксис, который веб-сайт apache сказал мне использовать, но это не сработало (получение ошибки поиска DNS для http://REMOTE_ADDR/foobar/). Я знаю, что должен что-то делать с Interpolate, но не могу понять, что именно это было бы.

Эта строка делает то, что должна, поэтому сервер отлично работает:
ProxyPass / http://localhost:81/

Это правила, которые я пробовал (используя переменную), но они не сработали.

ProxyPass / http://${REMOTE_ADDR}:81/
Ошибка: прокси [клиент 127.0.0.1]: ошибка поиска DNS для: $ {remote_addr}, возвращенного /

ProxyPass / https://%{REMOTE_ADDR}s/
Ошибка: прокси [клиент 127.0.0.1]: ошибка поиска DNS для:% {remote_addr} s, возвращенного /

ProxyPassInterpolateEnv On
...
ProxyPass / http://${REMOTE_ADDR}:81/ интерполировать
Ошибка: [клиент 127.0.0.1] ошибка парсинга URL //: 81: неверный хост / порт

У кого-нибудь есть идеи?

Ответы [ 2 ]

13 голосов
/ 02 февраля 2012

Для случая с интерполяцией он должен выглядеть следующим образом:

RewriteEngine on
RewriteMap lowercase int:tolower

#This sets the variable to env:
RewriteRule ^ - [E=SERVER_NAME:${lowercase:%{SERVER_NAME}}]

#Now interpolate makes variables available for proxypass & proxypassreverse:
ProxyPassInterpolateEnv On
ProxyPass / ajp://${SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

После поиска всю ночь в Интернете я не смог найти ни одного понятного случая, как этот, или каких-либо ответов.Я, наконец, понял это.

5 голосов
/ 03 января 2011

Вы можете заменить инструкции Proxypass правилами mod_rewrite кодом [P], P означает прокси.

Mod_rewrite позволит вам выполнять более конкретные действия.

...