
Apache 역방향 프록시를 통해 클라이언트 IP 주소를 기반으로 일부 특정 헤더를 설정하려고 합니다. 나는 사용하려고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백슬래시는 메타 문자를 이스케이프하는 올바른 기호입니다.
무엇이 잘못되었는지 추측할 수 있나요?
답변1
IP와 일치하는 정규식은 다음과 같습니다.
SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal
부분 을 참고하세요 .*
. 점이 없으면 다음과 일치하는 0개 이상의 횟수를 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