nginx: ordine di risoluzione "nome_server"?


8

Ho più blocchi "server" nel mio nginx.conf. La documentazione sembra errata sull'ordine in cui avviene la corrispondenza server_name.

La mia configurazione è simile a:

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
}

Sto cercando di capire perché le richieste con host = www.sub.domain.com stanno andando nel posto giusto (il secondo server), quando la documentazione indica che dovrebbe andare al primo server.

La documentazione di Nginx indica che i blocchi del server sono controllati "in ordine" per le corrispondenze, il che significa che qualsiasi richiesta con l'host * .sub.domain.com deve essere catturata dal primo server, non dal secondo server. ( http://wiki.nginx.org/HttpCoreModule#server_name )

Inoltre, il carattere jolly * corrisponde a qualsiasi numero di parti del sottodominio, quindi * .domain.com corrisponde a www.sub.domain.com. ( http://nginx.org/en/docs/http/server_names.html#wildcard_names )

Se questa documentazione è errata, qual è l'effettivo ordine di abbinamento?

Risposte:


18

Dalla documentazione di nginx ( http://nginx.org/en/docs/http/server_names.html ):

Quando si cerca un server virtuale per nome, se il nome corrisponde a più di una delle varianti specificate, ad esempio sia il nome jolly che la corrispondenza dell'espressione regolare, verrà scelta la prima variante corrispondente, nel seguente ordine di precedenza:

  1. nome esatto
  2. nome jolly più lungo che inizia con un asterisco, ad es. "* .example.org"
  3. nome jolly più lungo che termina con un asterisco, ad esempio "mail. *"
  4. prima espressione regolare corrispondente (in ordine di apparizione in un file di configurazione)

2

La documentazione dice:

Confronta l'intestazione Host della richiesta HTTP in entrata con i blocchi del server {...} nei file di configurazione di Nginx e seleziona il primo corrispondente.

Ciò che sembra accadere è che sceglie la migliore corrispondenza tra tutti i serverblocchi, quindi www.sub.domain.com, abbinando la seconda configurazione. Non ho documentazione per eseguire il backup, quindi è possibile eseguire alcuni test per confermare tale comportamento. C'è anche questo documento che parla della risoluzione dei nomi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.