Назад | Перейти на главную страницу

Apache ProxyHTMLURLMap с подстановкой строк из LocationMatch

Я пытаюсь создать обратный прокси-сервер Apache, чтобы сделать набор серверов доступным через единую точку доступа. Все серверы предлагают интерфейс веб-администратора на порту 3000, и я намерен представить их все как каталоги на обратном прокси-сервере. Интерфейсы содержат локальные ссылки, которые, конечно, должны быть переписаны, чтобы перейти в подкаталог правильного сервера на прокси.

Я могу добиться требуемого поведения с помощью таких фрагментов конфигурации для каждого сервера индивидуально:

<Location /testadmin-warsaw/>
        ProxyPass http://warsaw.example.com:3000/
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLURLMap  / /testadmin-warsaw/ L
        RequestHeader    unset Accept-Encoding
</Location>

Поскольку по мере того, как серверы приходят и уходят, это становится довольно утомительным и подверженным ошибкам, я стремлюсь к динамической конфигурации. Согласно документации Apache, следующее должно работать:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
        ProxyPassMatch   http://$1.example.com:3000/$2
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLInterp  On
        ProxyHTMLURLMap  / /testadmin-${env:MATCH_OFFICENAME|unknown}/ VL
        RequestHeader    unset Accept-Encoding
</LocationMatch>

<LocationMatch> установит переменную среды MATCH_OFFICENAME в часть имени офиса каталога, и ProxyHTMLURLMap вставит это имя в соответствующее место в переписанных ссылках.

Но когда я тестирую эту конфигурацию, ссылка, первоначально указывающая на /other/page.html переписан на /testadmin-unknown/other/page.html вместо того /testadmin-warsaw/other/page.html как предполагалось. Другими словами, ProxyHTMLURLMap действует так, как если бы переменная среды MATCH_OFFICENAME был расстроен.

Если я опущу env: часть и положить просто /testadmin-${MATCH_OFFICENAME}/ в качестве шаблона для отправки Apache регистрирует предупреждение: «AH00111: переменная конфигурации $ {MATCH_OFFICENAME} не определена».

Где моя ошибка?

Синтаксис без env: правильно. В AH00111 предупреждающее сообщение, которое он создает, является ложным, согласно Ошибка Apache № 58467.

Конфигурация:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
        ProxyPassMatch   http://$1.example.com:3000/$2
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLInterp  On
        ProxyHTMLURLMap  / /testadmin-${MATCH_OFFICENAME|unknown}/ VL
        RequestHeader    unset Accept-Encoding
</LocationMatch>

работает по назначению, за исключением ложного предупреждения при каждом запуске.