서버 일치 논리
nginx는 요청을 실행할 서버 블록을 결정할 때 주로 서버 블록의 listening 및 server_name 필드에 중점을 둡니다.
listen command
listen 필드는 서버 응답의 IP 주소를 정의하고 포트, 수신 필드가 명시적으로 구성되지 않은 경우 기본 수신은 0.0.0.0:80(루트) 또는 0.0.0.0:8080(비루트)입니다.
listen은 다음과 같이 구성할 수 있습니다.
ip 조합 and port
별도의 IP, 기본적으로 포트 80에서 수신 대기
별도의 포트, 기본적으로 모든 IP 인터페이스에서 수신 대기
unix 소켓 경로
마지막 항목은 일반적으로 만 사용됩니다. 다른 서버에서
사용할 서버를 선택하는 사이에 요청을 전달하는 규칙은 다음과 같습니다.
nginx는 먼저 청취 필드가 없는 모든 "불완전한" 청취 명령을 청취 0.0.0.0:80으로 변환하고, 청취합니다. 1.1.1.1 Listen to Listen 1.1.1.1:80 등
nginx는 요청된 IP와 포트를 기반으로 요청에 가장 잘 맞는 서버 블록 목록을 생성하며, 특정 IP와 일치하는 서버 블록에 우선 순위가 부여됩니다. 그런 다음 0.0.0.0이 선택됩니다. 그러나 두 경우 모두 포트가 정확히 일치해야 합니다.
가장 일치하는 항목이 하나만 있으면 일치하는 서버 블록이 응답에 사용됩니다. 그렇지 않으면 각 서버 블록의 server_name 지시문이 평가됩니다.
다시 한번, server_name 지시문은 Listen 지시문이 가장 일치하는 항목을 찾을 수 없는 경우에만 평가됩니다.
예를 들어, 다음과 같은 예를 가정합니다. com 도메인 이름은 192.168.0.1을 가리키고 192.168.0.1에 위치한 nginx는 다음 두 개의 서버 블록만 있습니다:
# server block 1server { listen 192.168.0.1; server_name other.com ... } # server block 2server { listen 80; server_name example.com ... }
server_name 지시어
listen 지시어에 따라 가장 일치하는 항목을 얻을 수 없는 경우 server_name 지시어를 구문 분석하기 시작합니다. nginx는 요청의 "host" 헤더를 확인합니다. 이 값에는 클라이언트가 실제로 요청하려는 도메인 이름 또는 IP 주소가 이 값을 기반으로 하여 server_name 지시어와 일치합니다. 일치 규칙은 다음과 같습니다:
nginx는 server_name 및 호스트 값과 정확히 일치하는 서버 블록을 찾으려고 시도합니다. 여러 개가 정확히 일치하는 경우 첫 번째로 일치하는 서버 블록이 사용됩니다.
정확하게 일치하는 서버 블록이 없으면 nginx는 server_name이 *로 시작하는 서버 블록을 찾으려고 시도합니다. 여러 개가 발견되면 가장 긴 일치 서버가 선택됩니다. 블록
으로 시작하는 서버 블록이 없으면 다음으로 끝나는 서버 블록을 찾습니다. 정규식(~으로 시작)을 사용하여 server_name을 정의하는 서버 블록의 경우 일치하는 항목이 여러 개 발견되면 첫 번째 일치 항목이 사용됩니다
정규식과 일치하는 서버 블록이 없으면 nginx는 하나의 기본 서버를 선택합니다. 각 IP 및 포트 조합은 하나의 기본 default_server 블록으로 구성할 수 있습니다. 블록이 없으면 사용 가능한 목록의 첫 번째 서버가 선택됩니다(이번 선택은 무작위입니다. 순서는 다음과 같습니다). 고정되지 않음)
예는 다음과 같습니다.
server { listen 80; server_name www.domain.com; ... }
(2) * 와일드카드로 시작하는 문자열:
server { listen 80; server_name *.domain.com; ... }
(3) * 와일드카드로 끝나는 문자열:
server { listen 80; server_name www.*; ... }
(4) 일치하는 정규식:
server { listen 80; server_name ~^(?.+)\.domain\.com$; ... }
(5) 위 항목 중 어느 것도 일치하지 않으면 default_server가 사용됩니다. default_server가 지정되지 않은 경우 no로 호스트 값을 지정할 수 있습니다. 일치하면 오류가 클라이언트에 반환됩니다. 이는 다른 사람이 정크 트래픽을 귀하의 웹 사이트로 리디렉션하는 것을 방지하는 데 사용될 수 있습니다.
server { listen 80 default_server; server_name _; return 444; }
nginx의 비표준 오류 코드인 444를 반환하여 nginx가 브라우저에서 연결을 끊도록 합니다
위치 일치 논리위치 구문 분석
location optional_modifier location_match { ... }
사용 가능한 수정자는 다음과 같습니다
판단 규칙1. nginx는 먼저 접두사를 기반으로 위치 일치를 확인합니다(즉, 정규 표현식을 포함하지 않는 일치)
2. 요청한 URL과 완전히 일치하는 = 수정자를 사용하는 위치 블록이 있는 경우 즉시 위치 응답을 사용합니다. 요청
3. = 수정자와 일치하는 위치 블록이 발견되지 않으면 정확하지 않은 접두사가 계속 계산되고, 주어진 URI를 기반으로 가장 긴 일치 접두사가 발견된 후 다음 처리가 수행됩니다.
(1) 가장 긴 일치 위치에 ^~ 수정자가 있는 경우 nginx는 요청에 응답하기 위해 즉시 이 위치를 사용합니다
(2) 가장 긴 일치 위치에 ^~ 수정자가 없는 경우 nginx는 임시로 해당 위치를 저장합니다.
4. 가장 긴 일치 접두사 위치 블록을 결정하고 저장한 후 nginx는 정규식이 일치하는 경우 계속해서 정규식 일치 위치를 확인합니다. 요구사항에 따라 선택됩니다. 요청한 uri와 일치하는 첫 번째 정규식 위치를 사용하여 요청에 응답합니다
5. 요청한 uri와 일치하는 정규식 위치를 찾을 수 없는 경우 이전에 저장된 가장 긴 접두사 위치입니다. 요청
보충 에 응답하는 데 사용됩니다.일반적으로 요청에 응답하기 위해 특정 위치를 선택하면 다른 위치에 관계없이 해당 위치 내에서 요청이 처리됩니다. 그러나 해당 위치의 특정 지침은 다음과 같은 새로운 위치 일치를 트리거합니다. 1 ) try_files
(2) rewrite
(3) error_page
위 내용은 Nginx에서 서버와 위치의 일치 논리는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!