nginx :“server_name”해결 순서?


8

내 nginx.conf에 "서버"블록이 여러 개 있습니다. server_name 일치 순서에 대한 문서가 잘못된 것 같습니다.

내 conf는 다음과 같습니다.

server {
  listen 80
  server_name domain.com *.domain.com

  # do stuff
}

server {
  listen 80
  server_name sub.domain.com *.sub.domain.com

  # do something else
}

문서가 첫 번째 서버로 가야한다고 지시 할 때 host = www.sub.domain.com을 가진 요청이 올바른 위치 (두 번째 서버)로 이동하는 이유를 알아 내려고합니다.

Nginx 문서에 따르면 서버 블록이 "순서대로"일치하는지 확인되므로 호스트 * .sub.domain.com에 대한 요청이 두 번째 서버가 아닌 첫 번째 서버에 의해 잡히게됩니다. ( http://wiki.nginx.org/HttpCoreModule#server_name )

또한 * 와일드 카드는 여러 하위 도메인 부분과 일치하므로 * .domain.com은 www.sub.domain.com과 일치합니다. ( http://nginx.org/en/docs/http/server_names.html#wildcard_names )

이 문서가 잘못된 경우 실제 일치하는 순서는 무엇입니까?

답변:


18

nginx 설명서 ( http://nginx.org/en/docs/http/server_names.html )에서 :

이름으로 가상 서버를 검색 할 때 이름이 지정된 변형 중 하나 이상 (예 : 와일드 카드 이름 및 정규식 일치)과 일치하는 경우 첫 번째 일치 변형이 다음 우선 순위에 따라 선택됩니다.

  1. 정확한 이름
  2. 별표로 시작하는 가장 긴 와일드 카드 이름 (예 : "* .example.org")
  3. 별표로 끝나는 가장 긴 와일드 카드 이름 (예 : "mail. *")
  4. 첫 번째로 일치하는 정규식 (구성 파일에 나타나는 순서대로)

2

설명서는 다음과 같이 말합니다.

들어오는 HTTP 요청의 호스트 헤더를 Nginx 구성 파일의 서버 {...} 블록과 비교하고 일치하는 첫 번째 파일을 선택합니다.

일어나는 것처럼 보이는 것은 모든 server블록 에서 가장 일치하는 것을 선택 하므로 www.sub.domain.com두 번째 구성과 일치한다는 것입니다. 백업 할 문서가 없으므로 해당 동작을 확인하기 위해 몇 가지 테스트를 실행할 수 있습니다. 이 문서 는 이름 확인에 대해서도 이야기하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.