SetEnvIfNoCase ディレクティブの IP 一致が失敗しました

SetEnvIfNoCase ディレクティブの IP 一致が失敗しました

Apacheリバースプロキシ経由でクライアントのIPアドレスに基づいて特定のヘッダーを設定しようとしています。環境設定NoCase/環境設定Ifしかし、どういうわけか正しい正規表現を書くことができません:(

以下は、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 正規表現に準拠していると主張しています。

しかし、それは機能しません。機能する唯一の構文は次のとおりです。

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

次にヘッダーが設定されるので、問題は何らかの形で正規表現の構文に関連しています。したがって、ドットを正しくエスケープしていないのではないかと思います。ただし、次の情報によると:http://perldoc.perl.org/perlre.html#正規表現バックスラッシュはメタ文字をエスケープするための正しい記号です。

何が問題なのかわかりますか?

答え1

IP に一致する正規表現は次のようになります。

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

部分に注意してください.*。ドットがない場合、 は0 回以上192*を意味するため、 に一致します。192Remote_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

関連情報