ทำไม 14 อักขระถึงความยาวสูงสุดสำหรับคำสั่ง nginx server_name?


13

ฉันมีโฮสต์เสมือนต่อไปนี้

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

เมื่อทำงานnginx -s reloadฉันได้รับข้อผิดพลาดต่อไปนี้:

nginx: [ฉุกเฉิน] ไม่สามารถสร้าง server_names_hash คุณควรเพิ่ม server_names_hash_bucket_size: 32

เกิดขึ้นเช่นเดียวกันสำหรับชื่อเซิร์ฟเวอร์ใด ๆ ที่มี 15 อักขระขึ้นไป

หากฉันตั้งค่า server_name เป็นab.example.com(หรือชื่อใด ๆ ที่มีความยาวต่ำกว่า 15 อักขระ) ปัญหาจะหยุดแสดง

ในการแก้ไขปัญหานี้ฉันได้เพิ่มสิ่งต่อไปนี้ใน/etc/nginx/nginx.conf(ไม่ได้กำหนดไว้ก่อนหน้านี้):

server_names_hash_bucket_size 64;

ตั้งค่าเป็น 33 ใช้งานได้เช่นกัน แต่ไม่ใช่ 32

ทำไมความยาวสูงสุด 14 อักขระเริ่มต้นสำหรับ server_name คืออะไร

ข้อ จำกัด นี้กำหนดโดยค่าเริ่มต้นของ nginx หรือโดยระบบที่มันรันอยู่

server_name ของ 15 มีผลต่อขนาดของที่เก็บแฮชสูงสุดอย่างไร (มีโฮสต์เสมือนเพียง 4 ตัวที่กำหนดไว้ในระบบ)


เนื้อหาของgrep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_sizeอะไร
ซาเวียร์ลูคัส

@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

คำตอบ:


11

ข้อผิดพลาดนี้เกิดขึ้นเมื่อserver_nameเป็นขนาดใหญ่เกินไปที่จะใส่ในถังกัญชา

ค่าเริ่มต้นสำหรับserver_names_hash_bucket_sizeถูกเลือกขึ้นอยู่กับขนาดบรรทัด CPU แคชของเซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่งมันควรจะมีขนาดเล็กที่สุดเท่าที่จะทำได้เพื่อลดการแคชของ CPUเนื่องจากserver_nameต้องค้นหาทุกคำขอ

สำหรับเหตุผลที่คุณ จำกัด ไว้แค่ 14 ตัวอักษรแทนที่จะเป็น 31 ตัวฉันคาดว่าจะเป็นไปได้หนึ่งในสองข้อ:

  • ไฟล์การกำหนดค่าของคุณอยู่ในการเข้ารหัส UTF-16 (หรือการเข้ารหัสอื่น ๆ ) แทน UTF-8 ซึ่งทำให้ null ปรากฏก่อนหรือหลังอักขระทุกตัวในข้อมูลดิบและเพิ่มขนาดเป็นสองเท่า สิ่งนี้อาจเกิดขึ้นหากคุณแก้ไขไฟล์บน Windows หากเป็นกรณีนี้ให้ใช้สิ่งที่ต้องการiconvแก้ไข
  • คุณพบข้อผิดพลาดที่ไม่รู้จักใน nginx

Vim กล่าวว่า fileencoding = utf-8 ฉันทำการแปลงโดยใช้ iconv เพื่อให้แน่ใจว่าการเข้ารหัสเป็น UTF8 แต่ไม่มีอะไรเปลี่ยนแปลงในพฤติกรรมของ nginx บางที VPS ของฉันอาจมี CPU ที่มีขนาดแคชบรรทัดน้อยมากมีวิธีใดบ้างที่ฉันจะตรวจสอบและจะมีค่าใดที่เหมาะสมสำหรับมัน
Virgiliu

ค่าที่เหมาะสมคือกำลังงานที่เล็กที่สุดของสองค่าที่ nginx จะเริ่มทำงานได้สำเร็จ หากคุณมี VPS คุณสามารถทำอะไรก็ได้ ...
Michael Hampton

6

ควรกำหนดความยาวเริ่มต้นโดยอัตโนมัติในระหว่างการเริ่มต้นขึ้นอยู่กับชื่อเซิร์ฟเวอร์ที่ใช้ แต่สิ่งนี้ควรได้รับการปรับปรุงในระหว่างการreloadดำเนินการ ดูว่ามันทำงานโดยไม่ตั้งขนาดถังด้วยตนเอง แต่ด้วยการรีสตาร์ทแทนการโหลดซ้ำ

ดูที่http://nginx.org/en/docs/hash.htmlเพื่อเรียนรู้วิธีการกำหนดขนาดแฮชและhttp://nginx.org/en/docs/http/server_names.htmlเพื่ออ่านเกี่ยวกับแฮชที่ใช้สำหรับชื่อเซิร์ฟเวอร์

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