>운영 및 유지보수 >엔진스 >Nginx에서 서버와 위치의 일치 논리는 무엇입니까?

Nginx에서 서버와 위치의 일치 논리는 무엇입니까?

WBOY
WBOY앞으로
2023-05-12 11:10:251752검색

서버 일치 논리

nginx는 요청을 실행할 서버 블록을 결정할 때 주로 서버 블록의 listening 및 server_name 필드에 중점을 둡니다.

listen command

listen 필드는 서버 응답의 IP 주소를 정의하고 포트, 수신 필드가 명시적으로 구성되지 않은 경우 기본 수신은 0.0.0.0:80(루트) 또는 0.0.0.0:8080(비루트)입니다.

listen은 다음과 같이 구성할 수 있습니다.

  1. ip 조합 and port

  2. 별도의 IP, 기본적으로 포트 80에서 수신 대기

  3. 별도의 포트, 기본적으로 모든 IP 인터페이스에서 수신 대기

  4. unix 소켓 경로

마지막 항목은 일반적으로 만 사용됩니다. 다른 서버에서

사용할 서버를 선택하는 사이에 요청을 전달하는 규칙은 다음과 같습니다.

  1. nginx는 먼저 청취 필드가 없는 모든 "불완전한" 청취 명령을 청취 0.0.0.0:80으로 변환하고, 청취합니다. 1.1.1.1 Listen to Listen 1.1.1.1:80 등

  2. nginx는 요청된 IP와 포트를 기반으로 요청에 가장 잘 맞는 서버 블록 목록을 생성하며, 특정 IP와 일치하는 서버 블록에 우선 순위가 부여됩니다. 그런 다음 0.0.0.0이 선택됩니다. 그러나 두 경우 모두 포트가 정확히 일치해야 합니다.

  3. 가장 일치하는 항목이 하나만 있으면 일치하는 서버 블록이 응답에 사용됩니다. 그렇지 않으면 각 서버 블록의 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 지시어와 일치합니다. 일치 규칙은 다음과 같습니다:

  1. nginx는 server_name 및 호스트 값과 정확히 일치하는 서버 블록을 찾으려고 시도합니다. 여러 개가 정확히 일치하는 경우 첫 번째로 일치하는 서버 블록이 사용됩니다.

  2. 정확하게 일치하는 서버 블록이 없으면 nginx는 server_name이 *로 시작하는 서버 블록을 찾으려고 시도합니다. 여러 개가 발견되면 가장 긴 일치 서버가 선택됩니다. 블록

  3. 으로 시작하는 서버 블록이 없으면 다음으로 끝나는 서버 블록을 찾습니다. 정규식(~으로 시작)을 사용하여 server_name을 정의하는 서버 블록의 경우 일치하는 항목이 여러 개 발견되면 첫 번째 일치 항목이 사용됩니다

  4. 정규식과 일치하는 서버 블록이 없으면 nginx는 하나의 기본 서버를 선택합니다. 각 IP 및 포트 조합은 하나의 기본 default_server 블록으로 구성할 수 있습니다. 블록이 없으면 사용 가능한 목록의 첫 번째 서버가 선택됩니다(이번 선택은 무작위입니다. 순서는 다음과 같습니다). 고정되지 않음)

  5. 예는 다음과 같습니다.

  6. (1) 정확한 server_name 일치, 예:
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 {
  ...
}

사용 가능한 수정자는 다음과 같습니다

판단 규칙

Nginx에서 서버와 위치의 일치 논리는 무엇입니까?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제