Я пытаюсь установить некоторые конкретные заголовки на основе 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