nginx: “sunucu_adı” çözüm sırası?


8

Benim nginx.conf birden çok "sunucu" blok var. Belgeler, sunucu_adı eşleşmesinin gerçekleştiği sırada yanlış görünüyor.

Kıçım şöyle bir şey görünüyor:

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
}

Belgeleri ilk sunucuya gitmesi gerektiğini gösterirken neden host = www.sub.etkialanı.com ile istekleri doğru yere (ikinci sunucu) gidiyoruz anlamaya çalışıyorum.

Nginx belgeleri, sunucu bloklarının eşleşmeler için "sırayla" kontrol edildiğini belirtir; yani, * .sub.etkialanı.com sunucusuyla yapılan herhangi bir istek ikinci sunucu tarafından değil, ilk sunucu tarafından yakalanmalıdır. ( http://wiki.nginx.org/HttpCoreModule#server_name )

Ayrıca, * joker karakteri herhangi bir sayıda alt alan adıyla eşleşir, bu nedenle * .domain.com www.sub.domain.com ile eşleşir. ( http://nginx.org/tr/docs/http/server_names.html#wildcard_names )

Bu dokümantasyon yanlışsa, gerçek eşleşme sırası nedir?

Yanıtlar:


18

Nginx belgelerinden ( http://nginx.org/en/docs/http/server_names.html ):

Bir sanal sunucuyu ada göre ararken, ad hem joker karakter adı hem de normal ifade eşleşmesi gibi birden fazla değişkenle eşleşiyorsa, ilk eşleşen değişken aşağıdaki öncelik sırasına göre seçilir:

  1. tam isim
  2. yıldız işareti ile başlayan en uzun joker adı, örneğin “* .example.org”
  3. yıldız işareti ile biten en uzun joker adı, örneğin “posta. *”
  4. ilk eşleşen normal ifade (yapılandırma dosyasındaki görünüm sırasıyla)

2

Belgeler diyor ki:

Gelen HTTP isteğinin Ana Bilgisayar üstbilgisini, Nginx yapılandırma dosyalarındaki {...} sunucu bloklarıyla karşılaştırır ve eşleşen ilk URL'yi seçer.

Görünen şey, tüm serverbloklardan en iyi eşleşmeyi seçmesi ve böylece www.sub.domain.comikinci yapılandırmayla eşleşmesidir. Bunu yedeklemek için hiçbir belge yok, bu nedenle bu davranışı onaylamak için bazı sınamalar çalıştırabilirsiniz. Ayrıca ad çözümleme hakkında konuşan bu doktor var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.