Я пытаюсь создать обратный прокси-сервер 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>
работает по назначению, за исключением ложного предупреждения при каждом запуске.