Я настраиваю сервер Apache 2.4.6 на внутренней машине для тестирования. Одна из вещей, которые должен делать сервер Apache, - действовать как обратный прокси для другого сервера, найденного на localhost: 3030.Как можно комбинировать LocationMatch и ProxyPassMatch?
Сервер на localhost: 3030 ожидает, что один из нескольких имен наборов данных на своем первом уровне пути (на данный момент набор содержит только набор данных experimental
, но позже будет добавлен еще один), поэтому я пытаюсь передать это через запрошенный путь.
В моем виртуальном хосте, это работает:
<Location /experimental/>
ProxyPass http://localhost:3030/experimental/
ProxyPassReverse/
</Location>
Для дополнительных наборов данных, я мог бы скопировать, что и заменить experimental
с другими именами наборов данных. Очевидно, что это приводит к большому дублированию кода/избыточности, что является одновременно источником ошибок и ужасом обслуживания.
Поэтому я хотел бы стать несколько более гибким и обработать несколько наборов данных в одном таком блоке. Это должно быть возможно с помощью LocationMatch
directive.
Как указано this comment и this page, мне нужно заменить ProxyPass
ProxyPassMatch
при использовании, что внутри LocationMatch
блока. По существу, docs состояние такой же:
То же самое будет происходить внутри секции LocationMatch, однако ProxyPass не интерпретирует регулярное выражение как таковое, поэтому необходимо использовать ProxyPassMatch в этой ситуации вместо этого.
LocationMatch
docs объяснить:
С 2.4.8 года, названные группы и обратные_связи захватываются и записываются в среде с соответствующим именем, начинающимся с «MATCH_» и в верхнем регистре. Это позволяет ссылаться на элементы URL-адресов из выражений и модулей, таких как mod_rewrite. Чтобы предотвратить путаницу, пронумерованные (неназванные) обратные ссылки игнорируются. Вместо этого используйте именованные группы.
Эта информация действительна только в Apache 2.4.8, которая presumeably почему следующее не работает на моем 2.4.6 установки:
<LocationMatch /(?<dataset>experimental)/>
ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
ProxyPassReverse/
</LocationMatch>
С другой стороны, this page и that posting подразумевают который может быть использован индекс численной группы ($1
) (как текст справки действует только по HTTPD 2.4.8, мой подозрения/надежда является то, что числовыми ссылками на работы, прежде чем 2.4.8 (?)
В любом случае, я попытался это:
<LocationMatch "/(experimental)/">
ProxyPassMatch http://localhost:3030/$1/
ProxyPassReverse/
</LocationMatch>
еще согласно журналам, внутренний вызов вызывает http://localhost:3030/$1/
вместо http://localhost:3030/experimental/
при запросе experimental
путь на ВХост URL.
ProxyPassMatch
docs только сказать:
При использовании внутри секции LocationMatch, первый аргумент опущен, и регулярное выражение получается из LocationMatch.
Однако текст не удосужились привести пример того, как совместить LocationMatch
и ProxyPassMatch
. Что я делаю неправильно?
Нумерованные обратные ссылки игнорируются с помощью '' 'LocationMatch''':' '' Во избежание путаницы нумерованные (неназванные) обратные ссылки игнорируются. Вместо этого используйте именованные группы. '' 'Http://httpd.apache.org/docs/current/mod/core.html#locationmatch –
Фактически эта ошибка может быть более актуальной для вашего вопроса: https://issues.apache.org /bugzilla/show_bug.cgi?id=50048 –