Saya memiliki host virtual berikut
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
Saat menjalankan nginx -s reload
saya mendapatkan kesalahan berikut:
nginx: [emerg] tidak dapat membangun server_names_hash, Anda harus menambah server_names_hash_bucket_size: 32
Hal yang sama terjadi untuk setiap nama_server yang memiliki 15 karakter atau lebih.
Jika saya mengatur server_name ke ab.example.com
(atau nama apa pun di bawah 15 karakter) masalah berhenti manifes.
Untuk memperbaikinya, saya menambahkan yang berikut ke /etc/nginx/nginx.conf
(tidak ditentukan sebelumnya):
server_names_hash_bucket_size 64;
Mengaturnya ke 33 bekerja dengan baik, tetapi tidak 32.
Mengapa panjang maksimum default 14 karakter untuk server_name?
Apakah batas ini ditentukan oleh pengaturan default nginx atau oleh sistem yang dijalankannya?
Bagaimana nama server dari 15 mempengaruhi ukuran ember hash maksimum? (hanya ada 4 host virtual yang ditentukan pada sistem)
sumber
grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size
?/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
Jawaban:
Kesalahan ini terjadi ketika
server_name
adalah terlalu besar untuk muat dalam ember hash .Default untuk
server_names_hash_bucket_size
dipilih tergantung pada ukuran garis cache CPU server. Khususnya itu dimaksudkan untuk menjadi sekecil mungkin, untuk mengurangi kesalahan cache CPU , karenaserver_name
s harus dilihat pada setiap permintaan.Mengenai alasan Anda dibatasi hingga 14 karakter, bukan 31 yang diharapkan, saya menduga satu dari dua kemungkinan:
iconv
untuk memperbaikinya.sumber
Panjang standar harus ditentukan secara otomatis selama mulai, tergantung pada nama server yang digunakan, tetapi ini juga harus diperbarui selama
reload
operasi. Lihat apakah itu berfungsi tanpa secara manual mengatur ukuran bucket tetapi dengan menghidupkan kembali, bukan memuat ulang.Lihat http://nginx.org/en/docs/hash.html untuk mempelajari bagaimana ukuran hash ditentukan dan http://nginx.org/en/docs/http/server_names.html untuk membaca tentang hash yang digunakan untuk nama server.
sumber