Nginx: binlerce sunucu_adı


12

Binlerce harici yapılandırma dosyası oluşturmadan veya çok uzun bir sunucu_adı satırı yazmadan Nginx'i binlerce farklı sunucu_adı ile nasıl sınırlandırabilirim?

Aslında, Nginx'in sadece server1.com, server2.com, vb. İçin ters proxy olmasını isterim ...

Benim için en iyi çözüm, kısıtlı sunucu_adlarımı içeren tek bir harici yapılandırma dosyasına sahip olmak olacaktır: server1.com, server2.com, vb.

Mümkün mü ?


Tamam, cevaplarınız için teşekkür ederim, reg olmadan çalışır. ifade. Kolbijack'in açıkladığı gibi büyük bir sunucu_adı listesi. Teşekkür.


Eğer yardımcı olanı ise kolbijack cevabını kabul etmelisiniz.
Oneiroi

Yanıtlar:


19

Server_name yönergesini tek başına bir dosyaya koyabilir ve daha sonra sunucu bloğunuzdan ekleyebilirsiniz:

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

Sunucu_adı dosyasının üstte sunucu_adı olması ve; geçerli bir yönerge olmak.


Bunu yaparsanız gecikme / arama gecikmeleri / RAM kullanımına dikkat edin. Apache'de büyük listelerle (yaklaşık 5.000 ServerAliasdirektif ve 16 milyon Deny fromdirektif kadar) bazı testler yaptım . 5.000 alan ölçülebilir ancak küçük bir gecikme oluşturur. Sayıyı arttırırken, gecikmenin yaklaşık 50.000'de fark edilmeye başladığını buldum. Apache (ve muhtemelen nginx ile), liste RAM'de tutulur, bu da denediğim en büyük setle, mevcut RAM'im içinde sadece bir çocuk işlemini başlatabileceğim anlamına geliyordu .
Ladadadada

1
@Ladadadada LOL. Az önce kontrol ettim. Nginx, server_namedirektifte 100.000 alan adı için 30Mb RAM kullanıyor ve yanıt Request rate: 36900.6 req/s (0.0 ms/req)
veriyor

1
1000 000 için 60Mb veRequest rate: 34716.8 req/s (0.0 ms/req)
VBart

Bu, en azından prefork MPM ile Apache'nin yönettiğinden çok daha iyi. Bilmek kullanışlı.
Ladadadada

7

server_nameSizin de beyan server {}bloğunun bu bir set desen içindeki sunucu_adi s maç için izin vermelidir, bir Düzenli ifade olabilir.

Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz: http://nginx.org/en/docs/http/server_names.html#regex_names


Teşekkür ederim, ancak özel alan adları listemi tek bir normal ifadede bildiremiyorum. sunucu_adı [zeus.domain.com | poseidon.domain.com | etc ...]; Çok uzun olurdu.
Fred

1
@fred Örnek bir veri kümesi verebilir misiniz? hiçbir alan adı diğeri gibi değilse bir Regex modelinin sorunu çözeceğinden oldukça emin olurdum.
Oneiroi

@Oneiroi: örnek kullanım örneği = kullanıcı tarafından oluşturulan alt alanlar. Her kullanıcının kendi alt etki alanını aldığı ve bunları farklı sunuculara yönlendirmek için Nginx'i kullanmak istediğiniz bir hizmet olarak yazılım ürünü düşünün. Bu durumda, hiç bir alan diğerine benzemez.
m.stenta

@ m.stenta ah, adil bir nokta. Alt alanlarda bazı ortaklıklar olmadıkça, evet normal ifade işe yaramaz. Veya alanın kendisinden elde edilen ve imho'nun amacını yenen regex'in yaratılmasına bağlanmanız gerekecek.
Oneiroi
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.