nginx: [emerg] tidak dapat membangun server_names_hash, Anda harus meningkatkan server_names_hash_bucket_size

109

Saya sedang dalam proses menyiapkan server baru. Http-Server pilihan saya adalah NGINX. Saya ingin menambahkan domain audi-freunde-einbeck.desebagai host virtual. Saya sudah memiliki 2 domain lain di sana dan berfungsi dengan baik, tetapi ketika saya mencoba menambahkan domain yang disebutkan di atas dan memulai server, saya Job failed. See system journal and 'systemctl status' for details. pikir itu karena tanda hubung, jadi saya hanya mencoba berbagai domain lain dengan dan tanpa tanda hubung , tapi tidak berhasil. Kesalahan yang sama. apa yang menyebabkan ini? Saya juga mencoba reboot, saya benar-benar bingung di sini. Bantuan apa pun akan sangat dihargai.

Saya telah bermain-main sedikit dan menemukan, bahwa, ketika saya hanya memasukkan satu domain, itu berhasil. Tapi ketika saya memasukkan domain lain, domain itu berhenti. Berikut adalah keluaran dalam status:

[root@netzmelone nginx]# systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
      Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
      Active: failed (Result: exit-code) since Sun, 16 Dec 2012 11:38:08 +0000; 7s ago
     Process: 14239 ExecStop=/usr/sbin/nginx -g pid /run/nginx.pid; -s quit (code=exited, status=1/FAILURE)
     Process: 14232 ExecStart=/usr/sbin/nginx -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=0/SUCCESS)
     Process: 14242 ExecStartPre=/usr/sbin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=1/FAILURE)
    Main PID: 14234 (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/nginx.service

Dec 16 11:38:08 netzmelone nginx[14242]: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
Dec 16 11:38:08 netzmelone nginx[14242]: nginx: configuration file /etc/nginx/nginx.conf test failed
oengelha
sumber
Apakah Anda sudah melihat log?
willglynn
Log mana yang harus saya lihat?
oengelha
atau Anda dapat menggunakan nama domain Anda di dalam nama_server Anda.
saran

Jawaban:

222

Ini kemungkinan besar terjadi karena nama domain yang panjang. Anda dapat memperbaikinya dengan menambahkan

server_names_hash_bucket_size  64;

di bagian atas httpblok Anda (mungkin terletak di /etc/nginx/nginx.conf). Saya mengutip dari dokumentasi nginx apa yang harus dilakukan ketika kesalahan ini muncul: In this case, the directive value should be increased to the next power of two. Jadi dalam kasus Anda seharusnya menjadi 64.

Jika Anda masih mendapatkan kesalahan yang sama, coba tingkatkan ke 128 dan selanjutnya.

Referensi: http://nginx.org/en/docs/http/server_names.html#optimization

Jap Mul
sumber
8
Menariknya, saya harus menggunakan 64 meskipun pesan kesalahan Nginx khusus saya memerintahkan saya untuk menggunakan 32.
Ryan
46
Sama seperti @Ryan - NGINX menyuruh saya menggunakan 64, tapi saya butuh 128 agar bisa berfungsi.
jerzy
@jerzy Beberapa detail pagi biasa terlewat, rupanya.
Erutan409
4
@jerzy Meskipun kata-kata yang agak rancu dari jenis pesan kesalahan tersebut menunjukkan sebaliknya, ini mungkin dirancang untuk menyertakan nilai saat ini , bukan untuk menginstruksikan Anda nilai apa yang akan digunakan.
node lain
@jerzy bagaimana cara meningkatkan ini di userdata saat menyediakan instance ec2. jadi pada dasarnya dalam skrip bash?
shan
31
  • buka /etc/nginx/nginx.confdengan hak menulis
  • hapus komentar atau tambahkan server_names_hash_bucket_size 64;
  • restart nginx sudo service nginx restart

Jika kesalahan masih berlanjut:

  • meningkat server_names_hash_bucket_sizedi langkah 128, 256, 512, dan seterusnya (meningkat dengan pangkat 2 setiap kali). misalnya.server_names_hash_bucket_size 128;
  • restart nginx setiap kali sampai kesalahan hilang (kesalahan akan selalu sama tidak peduli nilai apa yang sudah Anda tetapkan)
Raghavendra
sumber
terima kasih telah menyarankan pendekatan inkremental. Pesan nginx terus mengatakan setel ke 64: S
ybl
6

Ini mungkin terdengar agak acak, tetapi mungkin bisa membantu seorang nginx newb seperti saya.
Saya mendapatkan kesalahan ini ketika saya meninggalkan a ;di server_nametelepon.

punya:

server_name    www.mydomain.com  
access_log     /var/log/nginx/www.mydomain.com; 

memperbaiki:

server_name    www.mydomain.com;  
access_log     /var/log/nginx/www.mydomain.com; 

Semua arahan dalam file konfigurasi nginx harus diakhiri dengan ;
saya sering menyorot ;s di file saya sebelum menyimpan / mengunggah sebagai pemeriksaan terakhir setelah mengedit.

SherylHohman
sumber
3

Beginilah cara saya memecahkan:

cd /etc/nginx/

sudo nano nginx.conf
  • --uncomment atau tambahkan server_names_hash_bucket_size 64 -
  • --menambah nama_server_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • jika semua tidak apa-apa
sudo service nginx restart
Flavio Oliveira
sumber