계층 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 가상 서버 구성의 내용을 참조하십시오.

프로시저

  1. 계층 7 가상 서버를 엽니다.
  2. [가상 서버 식별자] 페이지로 건너뜁니다.
  3. 가상 서버 IP 주소 및 포트 번호를 입력합니다.
    가상 서버 포트 번호나 포트 범위를 입력할 수 있습니다.
  4. 고급 속성 세부 정보를 모두 입력합니다.
    옵션 설명
    최대 동시 연결 가상 서버가 동일한 로드 밸런서에서 호스팅되는 다른 애플리케이션의 리소스를 고갈시키지 않도록 가상 서버에 허용되는 최대 동시 연결 수를 설정합니다.
    최대 새 연결 속도 가상 서버가 리소스를 고갈시키지 않도록 서버 풀 멤버에 대한 최대 새 연결을 설정합니다.
    기본 풀 멤버 포트 가상 서버에 대한 풀 멤버 포트가 정의되지 않은 경우 기본 풀 멤버 포트를 입력합니다.

    예를 들어, 가상 서버가 포트 범위 2000-2999로 정의되고 기본 풀 멤버 포트 범위가 8000-8999로 설정되면 가상 서버 포트 2500에 대해 들어오는 클라이언트 연결은 대상 포트가 8500으로 설정된 풀 멤버로 전송됩니다.

  5. (선택 사항) 드롭다운 메뉴에서 기존 기본 서버 풀을 선택합니다.
    서버 풀은 유사하게 구성되고 동일한 애플리케이션을 실행하는 하나 이상의 서버로 구성되며, 이러한 서버를 풀 멤버라고 합니다.
  6. 추가를 클릭하여 HTTP 요청 재작성 단계에 대한 로드 밸런서 규칙을 구성합니다.
    지원되는 일치 유형은 REGEX, STARTS_WITH, ENDS_WITH 및 반전 옵션입니다.
    지원되는 일치 조건 설명
    HTTP 요청 메서드 HTTP 요청 메서드를 일치시킵니다.

    http_request.method - 일치시킬 값

    HTTP 요청 URI 쿼리 인수 없이 HTTP 요청 URI를 일치시킵니다.

    http_request.uri - 일치시킬 값

    HTTP 요청 URI 인수 HTTP 요청 URI 쿼리 인수를 일치시킵니다.

    http_request.uri_arguments - 일치시킬 값

    HTTP 요청 버전 HTTP 요청 버전을 일치시킵니다.

    http_request.version - 일치시킬 값

    HTTP 요청 헤더 HTTP 요청 헤더를 일치시킵니다.

    http_request.header_name - 일치시킬 헤더 이름

    http_request.header_value - 일치시킬 값

    HTTP 요청 페이로드 HTTP 요청 본문 컨텐츠를 일치시킵니다.

    http_request.body_value - 일치시킬 값

    TCP 헤더 필드 TCP 소스 또는 대상 포트를 일치시킵니다.

    tcp_header.source_port - 일치시킬 소스 포트

    tcp_header.destination_port - 일치시킬 대상 포트

    IP 헤더 필드 IP 소스 또는 대상 주소를 일치시킵니다.

    ip_header.source_address - 일치시킬 소스 주소

    ip_header.destination_address - 일치시킬 대상 주소

    작업 설명
    HTTP 요청 URI 재작성 URI를 수정합니다.

    http_request.uri - 작성할 URI(쿼리 인수 없음)

    http_request.uri_args - 작성할 URI 쿼리 인수

    HTTP 요청 헤더 재작성 HTTP 헤더의 값을 수정합니다.

    http_request.header_name - 헤더 이름

    http_request.header_value - 작성할 값

  7. 추가를 클릭하여 HTTP 요청 전달에 대한 로드 밸런서 규칙을 구성합니다.
    모든 일치 값은 정규식을 허용합니다.
    지원되는 일치 조건 설명
    HTTP 요청 메서드 HTTP 요청 메서드를 일치시킵니다.

    http_request.method - 일치시킬 값

    HTTP 요청 URI HTTP 요청 URI를 일치시킵니다.

    http_request.uri - 일치시킬 값

    HTTP 요청 URI 인수 HTTP 요청 URI 쿼리 인수를 일치시킵니다.

    http_request.uri_args - 일치시킬 값

    HTTP 요청 버전

    HTTP 요청 버전을 일치시킵니다.

    http_request.version - 일치시킬 값

    HTTP 요청 헤더

    HTTP 요청 헤더를 일치시킵니다.

    http_request.header_name - 일치시킬 헤더 이름

    http_request.header_value - 일치시킬 값

    HTTP 요청 페이로드

    HTTP 요청 본문 컨텐츠를 일치시킵니다.

    http_request.body_value - 일치시킬 값

    TCP 헤더 필드

    TCP 소스 또는 대상 포트를 일치시킵니다.

    tcp_header.source_port - 일치시킬 소스 포트

    tcp_header.destination_port - 일치시킬 대상 포트

    IP 헤더 필드

    IP 소스 주소를 일치시킵니다.

    ip_header.source_address - 일치시킬 소스 주소

    작업 설명
    거절 예를 들면 상태를 5xx로 설정하여 요청을 거부합니다.

    http_forward.reply_status - 거부하는 데 사용되는 HTTP 상태 코드

    http_forward.reply_message - HTTP 거부 메시지

    리디렉션 요청을 리디렉션합니다. 상태 코드를 3xx로 설정해야 합니다.

    http_forward.redirect_status - 리디렉션을 위한 HTTP 상태 코드

    http_forward.redirect_url - HTTP 리디렉션 URL

    풀 선택

    요청을 특정 서버 풀에 강제 적용합니다. 지정된 풀 멤버의 구성된 알고리즘(예측자)은 서버 풀 내에서 서버를 선택하는 데 사용됩니다.

    hhttp_forward.select_pool - 서버 풀 UUID

  8. 추가를 클릭하여 HTTP 응답 재작성에 대한 로드 밸런서 규칙을 구성합니다.
    모든 일치 값은 정규식을 허용합니다.
    지원되는 일치 조건 설명
    HTTP 응답 헤더 HTTP 응답 헤더를 일치시킵니다.

    http_response.header_name - 일치시킬 헤더 이름

    http_response.header_value - 일치시킬 값

    작업 설명
    HTTP 응답 헤더 다시 쓰기 HTTP 응답 헤더의 값을 수정합니다.

    http_response.header_name - 헤더 이름

    http_response.header_value - 작성할 값

  9. (선택 사항) 다음을 클릭하여 로드 밸런싱 프로파일을 구성합니다.
  10. 완료를 클릭합니다.