nginx: ordem de resolução "server_name"?


8

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

Meu conf é algo como:

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 as solicitações com host = www.sub.domain.com estão indo para o local correto (o segundo servidor), quando a documentação indica que deveria 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. ( http://wiki.nginx.org/HttpCoreModule#server_name )

Além disso, o curinga * corresponde a qualquer número de partes do subdomínio; portanto, * .domain.com corresponde a www.sub.domain.com. ( http://nginx.org/en/docs/http/server_names.html#wildcard_names )

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

Respostas:


18

Na documentação do nginx ( http://nginx.org/en/docs/http/server_names.html ):

Ao procurar um servidor virtual por nome, se o nome corresponder a mais de uma das variantes especificadas, por exemplo, nome curinga e correspondência de expressão regular, 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. o nome mais curinga que termina com um asterisco, por exemplo, "mail. *"
  4. primeira expressão regular correspondente (em ordem de aparência em um arquivo de configuração)

2

A documentação diz:

Compara o cabeçalho Host da solicitação HTTP recebida com os blocos do servidor {...} nos arquivos de configuração do Nginx e seleciona o primeiro que corresponder.

O que parece acontecer é que ele escolhe a melhor correspondência de todos os serverblocos www.sub.domain.com, correspondendo à segunda configuração. Como não tenho documentação para fazer backup, você pode executar alguns testes para confirmar esse comportamento. Há também este documento falando sobre resolução de nomes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.