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

Директива SetEnvIfNoCase не соответствует IP-адресу

Я пытаюсь установить некоторые конкретные заголовки на основе IP-адреса клиента через обратный прокси-сервер Apache. Я пытаюсь использовать SetEnvIfNoCase / SetEnvIf но мне почему-то не удается написать правильное регулярное выражение :(

Вот что я пытался установить в httpd.conf (предположим, что директивы обратного прокси в порядке - они есть):

SetEnvIfNoCase Remote_Addr "192\.168*" user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Допустим, запрос исходит от 192.168.1.100. Тогда предполагается, что регулярное выражение должно совпадать - я пробовал его в нескольких онлайн-валидаторах, которые утверждают, что они совместимы с perl, и 192.168.1.100 совпадает с "192.168 *". Документация SetEnvIf также утверждает, что она совместима с perl reg ex.

Однако это не работает. Единственный действующий синтаксис был следующим:

SetEnvIfNoCase Remote_Addr 192* user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Затем устанавливается заголовок, поэтому проблема каким-то образом связана с синтаксисом регулярного выражения. Итак, я думаю, что я неправильно избегаю точки. Однако согласно: http://perldoc.perl.org/perlre.html#Regular-Expressions обратная косая черта - правильный символ для экранирования метасимволов.

Есть догадки, что не так?

Регулярное выражение для соответствия IP может быть:

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

Обратите внимание .* часть. Без точки это работает, потому что 192* средства 192 ноль или более раз, что соответствует Remote_Addr:

$ pcretest
PCRE version 8.33 2013-05-28

  re> /^192*/
data> 192.foo.bar.baz
 0: 192
  re> /^192\.168.*/
data> 192.168.12.12
 0: 192.168.12.12
data> 192.167.23.45
No match