Neden 14 karakter nginx server_name yönergesi için maksimum uzunluktur?


13

Aşağıdaki sanal ana makineye sahibim

server
{
  server_name abc.example.com;
  root /var/www/test/;
  index index.html;
}

Çalıştırırken nginx -s reloadaşağıdaki hatayı alıyorum:

nginx: [oluştu] server_names_hash dosyasını oluşturamadı, server_names_hash_bucket_size değerini artırmalısınız: 32

Aynı şey 15 veya daha fazla karakter içeren herhangi bir sunucu_adı için de geçerlidir.

Sunucu_adı ab.example.com(veya 15 karakterin altındaki herhangi bir ad) olarak ayarlanırsam sorun ortaya çıkmaz.

Bunu düzeltmek için aşağıdakileri ekledim /etc/nginx/nginx.conf(daha önce tanımlanmadı):

server_names_hash_bucket_size 64;

Bunu 33 olarak ayarlamak da işe yaradı, ancak 32 değil.

Neden sunucu_adı için varsayılan maksimum uzunluk 14 karakterdir?

Bu sınır nginx'in varsayılan ayarları veya üzerinde çalıştığı sistem tarafından getiriliyor mu?

Sunucu_adı 15 olan bir değer en fazla karma grup boyutunu nasıl etkiler? (sistemde yalnızca 4 sanal ana bilgisayar tanımlanmıştır)


İçeriği nedir grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size?
Xavier Lucas

@XavierLucas:/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size:64
Virgiliu

Yanıtlar:


11

Bu hata oluştuğunda server_nameise karma kova sığmayacak kadar büyük .

İçin varsayılan server_names_hash_bucket_size, sunucunun CPU önbellek hattı boyutuna bağlı olarak seçilir. Özellikle, CPU önbellek hatalarını azaltmak için mümkün olduğu kadar küçük olması amaçlanmıştır , çünkü server_nameher istekte aranmalıdır.

Neden beklenen 31 yerine 14 karakterle sınırlı olduğunuza göre, iki olasılıktan birinden şüpheleniyorum:

  • Yapılandırma dosyanız UTF-8 yerine UTF-16 kodlamasında (veya başka bir kodlamada). Dosyayı Windows'ta düzenlerseniz bu olabilir. Bu durumda, iconvdüzeltmek için benzer bir şey kullanın .
  • Nginx'te bilinmeyen bir hatayla karşılaştınız.

Vim fileencoding = utf-8 olduğunu söylüyor. Ben kodlama UTF8 olduğundan emin olmak için iconv kullanarak bir dönüşüm yaptım ama nginx davranışı değişti. Belki de VPS'mde çok küçük bir önbellek hattı boyutuna sahip bir CPU var, onu kontrol etmenin herhangi bir yolu var mı ve bunun için makul bir değer ne olurdu?
Virgiliu

Makul değer, nginx'in başarıyla başlayacağı ikisinin en küçük gücüdür. Bir
Michael Hampton

6

Varsayılan uzunluk, kullanılan sunucu adlarına bağlı olarak başlangıç ​​sırasında otomatik olarak belirlenmelidir, ancak bu reloadişlem sırasında da güncellenmelidir . Kova boyutunu manuel olarak ayarlamadan ancak yeniden yükleme yerine yeniden başlatma ile çalışıp çalışmadığına bakın.

Bkz http://nginx.org/en/docs/hash.html karma boyutlarının belirlenmesi ve öğrenmek http://nginx.org/en/docs/http/server_names.html sunucu adları için kullanılan hash okumayı.

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.