정규식(REGEX)은 로드 밸런서 규칙에 대한 일치 조건에서 사용됩니다.
PCRE(Perl 호환 정규식) 스타일 REGEX 패턴이 지원되지만 고급 사용 사례에 대한 몇 가지 제한 사항이 있습니다. REGEX가 일치 조건에서 사용되면 명명된 캡처링 그룹이 지원됩니다.
REGEX 제한에는 다음이 포함됩니다.
- 문자 공용 구조체 및 교차가 지원되지 않습니다. 예를 들어, [a-z[0-9]]와 [a-z&&[aeiou]] 대신 [a-z0-9]와 [aeiou]를 각각 사용하십시오.
- 9개의 역참조만 지원되며 참조를 위해 \1부터 \9까지 사용할 수 있습니다.
- \ddd 형식이 아닌 \0dd 형식을 사용하여 8진수 문자와 일치시킵니다.
- 내장형 플래그는 최상위 레벨에서 지원되지 않으며 그룹 내에서만 지원됩니다. 예를 들어 "Case (?i:s)ensitive" 대신 "Case ((?i:s)ensitive)"를 사용하십시오.
- 전처리 작업 \l, \u, \L, \U가 지원되지 않습니다. 여기서 \l – 다음 문자 소문자, \u – 다음 문자 대문자, \L - \E까지 소문자, \U - \E까지 대문자입니다.
- (?(condition)X), (?{code}), (??{Code}) 및 (?#comment)는 지원되지 않습니다.
- 미리 정의된 유니코드 문자 클래스 \X는 지원되지 않습니다.
- 명명된 문자 구성을 유니 코드 문자에 사용하는 것이 지원되지 않습니다. 예를 들어 \N{name} 대신 \u2018을 사용합니다.
REGEX가 일치 조건에서 사용되면 명명된 캡처링 그룹이 지원됩니다. 예를 들어 REGEX 일치 패턴 /news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*)을 사용하여 /news/2018-06-15/news1234.html과 같은 URI를 일치시킬 수 있습니다.
변수는 다음과 같이 설정됩니다. $year = "2018" $month = "06" $day = "15" $article = "news1234.html". 변수가 설정된 후에는 이러한 변수를 로드 밸런서 규칙 작업에 사용할 수 있습니다. 예를 들어 /news.py?year=$year&month=$month&day=$day&article=$article과 같이 일치된 변수를 사용하여 URI를 다시 작성할 수 있습니다. 그러면 URI가 /news.py?year=2018&month=06&day=15&article=news1234.html로 다시 작성됩니다.
재작성 작업에는 명명된 캡처링 그룹과 기본 제공 변수의 조합을 사용할 수 있습니다. 예를 들어 URI가 /news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr로 작성될 수 있습니다. 그러면 예제 URI가 /news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1로 재작성됩니다.
참고: 명명된 캡처링 그룹의 경우 _ 문자로 이름을 시작할 수 없습니다.명명된 캡처링 그룹 외에도 다음과 같은 기본 제공 변수를 재작성 작업에 사용할 수 있습니다. 모든 기본 제공 변수 이름은 _로 시작합니다.- $_args - 요청의 인수
- $_arg_<name> - 요청 줄의 인수 <name>
- $_cookie_<name> - <name> 쿠키의 값
- $_upstream_cookie_<name> - "Set-Cookie" 응답 헤더 필드에서 업스트림 서버가 보낸 지정된 이름의 쿠키
- $_upstream_http_<name> - 임의 응답 헤더 필드이며 <name>은 소문자로 변환된 필드 이름이고 대시는 밑줄로 대체됨
- $_host - 우선 순위에 따라 - 요청 라인의 호스트 이름 또는 “Host” 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름
- $_http_<name> - 임의 요청 헤더 필드이며 <name>은 소문자로 변환된 필드 이름이고 대시는 밑줄로 대체됨
- $_https - SSL 모드에서 연결이 작동하면 "on", 그렇지 않으면 ""
- $_is_args - 요청 라인에 인수가 있으면 "?", 그렇지 않으면 ""
- $_query_string - $_args와 동일
- $_remote_addr - 클라이언트 주소
- $_remote_port - 클라이언트 포트
- $_request_uri - 원래 요청 URI 전체(인수 포함)
- $_scheme – 요청 체계, “http” 또는 “https”
- $_server_addr -요청을 수락한 서버의 주소
- $_server_name - 요청을 수락한 서버의 이름
- $_server_port - 요청을 수락한 서버의 포트
- $_server_protocol - 요청 프로토콜, 일반적으로 “HTTP/1.0” 또는 “HTTP/1.1”
- $_ssl_client_escaped_cert - 설정된 SSL 연결에 대한 PEM 형식의 클라이언트 인증서를 반환합니다.
- $_ssl_server_name - SNI를 통해 요청된 서버 이름을 반환함
- $_uri - 요청의 URI 경로
- $ _ssl_ciphers: 클라이언트 SSL 암호를 반환함
- $ _ssl_c_i_dn: RFC 2253에 따라 설정된 SSL 연결에 대한 클라이언트 인증서의 "발급자 DN" 문자열을 반환함
- $_ssl_client_s_dn: RFC 2253에 따라 설정된 SSL 연결에 대한 클라이언트 인증서의 "주체 DN" 문자열을 반환함
- $_ssl_protocol: 설정된 SSL 연결의 프로토콜을 반환함
- $_ssl_session_reused: SSL 세션을 재사용하는 경우 "r"을 반환하고, 그렇지 않은 경우 "."를 반환함