Mengapa 14 karakter panjang maksimum untuk direktif nginx server_name?


13

Saya memiliki host virtual berikut

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

Saat menjalankan nginx -s reloadsaya 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)


Apa isinya 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

Jawaban:


11

Kesalahan ini terjadi ketika server_nameadalah terlalu besar untuk muat dalam ember hash .

Default untuk server_names_hash_bucket_sizedipilih tergantung pada ukuran garis cache CPU server. Khususnya itu dimaksudkan untuk menjadi sekecil mungkin, untuk mengurangi kesalahan cache CPU , karena server_names harus dilihat pada setiap permintaan.

Mengenai alasan Anda dibatasi hingga 14 karakter, bukan 31 yang diharapkan, saya menduga satu dari dua kemungkinan:

  • File konfigurasi Anda dalam penyandian UTF-16 (atau penyandian lainnya) alih-alih UTF-8, yang menyebabkan null muncul sebelum atau setelah setiap karakter dalam data mentah, dan menggandakan ukurannya. Ini mungkin terjadi jika Anda mengedit file di Windows. Jika ini masalahnya, gunakan sesuatu seperti iconvuntuk memperbaikinya.
  • Anda mengalami bug yang tidak dikenal di nginx.

Vim mengatakan bahwa fileencoding = utf-8. Saya melakukan konversi menggunakan iconv untuk memastikan bahwa pengkodean adalah UTF8 tetapi tidak ada yang berubah dalam perilaku nginx. Mungkin VPS saya memiliki CPU dengan ukuran garis cache yang sangat kecil, apakah ada cara saya memeriksanya dan apa nilai yang masuk akal untuk itu?
Virgiliu

Nilai wajarnya adalah kekuatan terkecil dari dua yang nginx akan mulai dengan sukses. Jika Anda memiliki VPS itu bisa melakukan apa saja ...
Michael Hampton

6

Panjang standar harus ditentukan secara otomatis selama mulai, tergantung pada nama server yang digunakan, tetapi ini juga harus diperbarui selama reloadoperasi. 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.