계층 7 가상 서버를 사용하면 조건 또는 작업 규칙을 사용하여 로드 밸런서 규칙을 선택적으로 구성하고 로드 밸런싱 동작을 사용자 지정할 수 있습니다.
로드 밸런서 규칙은 일치 유형에 대해 정규식을 지원합니다. PCRE 스타일 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_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"을 반환하고, 그렇지 않은 경우 "."를 반환함
사전 요구 사항
계층 7 가상 서버를 사용할 수 있는지 확인합니다. 관리자 모드에서 계층 7 가상 서버 구성 항목을 참조하십시오.