nginx: ordem de resolução “server_name”?

8

Eu tenho vários blocos "servidor" no meu nginx.conf. A documentação parece errada sobre a ordem na qual a correspondência do server_name ocorre.

Minha conf é parecida com:

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
}

Estou tentando descobrir por que solicitações com host = www.sub.domain.com estão indo para o local correto (o segundo servidor), quando a documentação indica que ele deve estar indo para o primeiro servidor.

A documentação do Nginx indica que os blocos do servidor são verificados "em ordem" para correspondências, o que significa que qualquer solicitação com o host * .sub.domain.com deve ser capturada pelo primeiro servidor, não pelo segundo servidor. ( link )

Além disso, o curinga * corresponde a qualquer número de partes de subdomínio, portanto, * .domain.com corresponde a www.sub.domain.com. ( link )

Se esta documentação estiver errada, qual é a ordem de correspondência real?

    
por user41356 26.02.2011 / 04:33

2 respostas

16

Na documentação do nginx ( link ):

Ao pesquisar um servidor virtual por nome, se o nome corresponder a mais de uma das variantes especificadas, por exemplo, Tanto o nome curinga quanto a expressão regular correspondem, a primeira variante correspondente será escolhida, na seguinte ordem de precedência:

  1. nome exato
  2. nome curinga mais longo começando com um asterisco, por exemplo "* .Example.org"
  3. nome curinga mais longo que termina com um asterisco, por exemplo “Mail. *”
  4. primeira expressão regular correspondente (em ordem de aparição em um arquivo de configuração)
por 25.05.2015 / 04:21
2

A documentação diz:

Compares the Host header of the incoming HTTP request against the server { ... } blocks in the Nginx configuration files and selects the first one that matches.

O que parece acontecer é que ele escolhe a melhor correspondência de todos os server blocos, então www.sub.domain.com , correspondendo à segunda configuração. Não tenho documentação para comprovar isso, portanto, você pode executar alguns testes para confirmar esse comportamento. Também há este documento falando sobre a resolução de nomes.

    
por 26.02.2011 / 05:41

Tags