nginx: [Emerg] ไม่สามารถสร้าง server_names_hash ได้คุณควรเพิ่ม server_names_hash_bucket_size


101

ฉันอยู่ระหว่างการตั้งค่าเซิร์ฟเวอร์ใหม่ http-Server ที่ฉันเลือกคือ NGINX ฉันต้องการเพิ่มโดเมนaudi-freunde-einbeck.deเป็นโฮสต์เสมือน ฉันมีโดเมนอื่นอยู่แล้ว 2 โดเมนและใช้งานได้ดี แต่เมื่อฉันพยายามเพิ่มโดเมนที่กล่าวถึงข้างต้นและเริ่มเซิร์ฟเวอร์มันทำให้Job failed. See system journal and 'systemctl status' for details. ฉันคิดว่าเป็นเพราะเครื่องหมายขีดกลางดังนั้นฉันจึงลองโดเมนอื่น ๆ ที่มีและไม่มีขีดกลาง แต่ไม่มีโชค ข้อผิดพลาดเดียวกัน อะไรคือสาเหตุนี้ ฉันลองรีบูตด้วยฉันสูญเสียที่นี่จริงๆ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

ฉันได้เล่นไปสักพักและพบว่าเมื่อฉันใส่โดเมนเดียวมันก็ใช้ได้ แต่เมื่อฉันใส่โดเมนอื่นมันก็หยุดลง นี่คือผลลัพธ์ในสถานะ:

[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

คุณได้ดูบันทึกใด ๆ หรือไม่?
willglynn

ฉันควรดูบันทึกใด
oengelha

หรือคุณสามารถใช้เพียงชื่อโดเมนของคุณภายใน server_name ของคุณ
saran

คำตอบ:


206

ปัญหานี้มักเกิดขึ้นเนื่องจากชื่อโดเมนที่ยาว คุณสามารถแก้ไขได้โดยการเพิ่ม

server_names_hash_bucket_size  64;

ที่ด้านบนสุดของhttpบล็อกของคุณ(อาจอยู่ใน/etc/nginx/nginx.conf) ผมอ้างอิงจากเอกสาร Nginx In this case, the directive value should be increased to the next power of twoว่าจะทำอย่างไรเมื่อข้อผิดพลาดนี้ปรากฏขึ้น: ดังนั้นในกรณีของคุณควรกลายเป็น 64

หากคุณยังคงได้รับข้อผิดพลาดเดิมให้ลองเพิ่มเป็น 128 ขึ้นไป

อ้างอิง: http://nginx.org/en/docs/http/server_names.html#optimization


8
ที่น่าสนใจคือฉันต้องใช้ 64 แม้ว่าข้อความแสดงข้อผิดพลาด Nginx ของฉันจะสั่งให้ฉันใช้ 32 ก็ตาม
Ryan

44
เหมือนกับ @Ryan - NGINX บอกให้ฉันใช้ 64 แต่ฉันต้องการ 128 เพื่อให้มันใช้งานได้
jerzy

@jerzy รายละเอียดยามเช้าบางอย่างพลาดไปอย่างเห็นได้ชัด
Erutan409

4
@jerzy แม้ว่าข้อความแสดงข้อผิดพลาดจะไม่ชัดเจนเล็กน้อย แต่ก็อาจได้รับการออกแบบมาเพื่อรวมค่าปัจจุบันไม่ใช่เพื่อสั่งให้คุณใช้ค่าใด
anothernode

@jerzy จะเพิ่มสิ่งนี้ใน userdata ได้อย่างไรเมื่อจัดเตรียมอินสแตนซ์ ec2 โดยพื้นฐานแล้วใน bash script?
shan

29
  • เปิด/etc/nginx/nginx.confด้วยสิทธิพิเศษในการเขียน
  • ไม่แสดงความคิดเห็นหรือเพิ่ม server_names_hash_bucket_size 64;
  • รีสตาร์ท nginx sudo service nginx restart

หากข้อผิดพลาดยังคงมีอยู่:

  • เพิ่มขึ้นserver_names_hash_bucket_sizeในขั้นตอน 128, 256, 512 และอื่น ๆ (เพิ่มขึ้นครั้งละ 2 หน่วย) เช่น.server_names_hash_bucket_size 128;
  • รีสตาร์ท nginx ทุกครั้งจนกว่าข้อผิดพลาดจะหายไป (ข้อผิดพลาดจะเหมือนกันเสมอไม่ว่าคุณจะตั้งค่าไว้แล้วก็ตาม)

ขอบคุณที่แนะนำวิธีการเพิ่มเติม ข้อความของ nginx บอกว่าตั้งค่าเป็น64: S
ybl

5

อาจฟังดูสุ่ม แต่อาจช่วยให้ nginx newb เหมือนตัวเอง
ฉันได้รับข้อผิดพลาดนี้เมื่อฉันออก;จากserver_nameบรรทัด

มี:

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

แก้ไข:

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

คำสั่งทั้งหมดในไฟล์กำหนดค่า nginx ต้องลงท้ายด้วย;
ฉันมักจะเน้น;s ในไฟล์ของฉันก่อนบันทึก / อัปโหลดเป็นการตรวจสอบขั้นสุดท้ายหลังจากแก้ไข


2

นี่คือวิธีที่ฉันแก้ไข:

cd /etc/nginx/

sudo nano nginx.conf
  • - ไม่แสดงความคิดเห็นหรือเพิ่ม server_names_hash_bucket_size 64 -
  • - เพิ่ม server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • ถ้าทั้งหมดมันโอเค
sudo service nginx restart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.