ฉันจะตั้งค่าโฮสต์เริ่มต้นสำหรับ nginx ได้อย่างไร


11

ฉันกำลังพยายามหาวิธีตั้งค่าโฮสต์เริ่มต้นสำหรับการติดตั้ง nginx ของฉัน ฉันพบบทความนี้ใน nginx Wiki:

http://wiki.nginx.org/NginxVirtualHostExample#A_Default_Catchall_Virtual_Host

น่าเสียดายที่มันใช้ไม่ได้ หลังจากรีสตาร์ทฉันได้รับสิ่งนี้:

Restarting nginx: nginx: [emerg] unknown directive "http" in /etc/nginx/sites-enabled/catchall:1
nginx: configuration file /etc/nginx/nginx.conf test failed

หลังจากลบคำสั่ง http ฉันได้รับ:

Restarting nginx: nginx: [emerg] unknown log format "main" in /etc/nginx/sites-enabled/catchall:7
nginx: configuration file /etc/nginx/nginx.conf test failed

ฉันใช้ Ubuntu 10.04.3 ซึ่งฉันใช้ nginx PPA อย่างเป็นทางการ เวอร์ชัน 1.0.9 ของ nginx กำลังทำงานอยู่

คำตอบ:


16

การกำหนดค่า Nginx ขึ้นอยู่กับชุดของบล็อกซ้อนกัน ควรมีบล็อก http หนึ่งบล็อกเท่านั้น โดยทั่วไปจะมีการกำหนดไว้ใน /etc/nginx/nginx.conf - ไฟล์ที่รวมทั้งหมด (เช่นจากไซต์ที่มี) จะรวมอยู่ในบล็อก http นี้ ในการตั้งค่าโฮสต์เริ่มต้น / catch-all คุณต้องใช้ส่วนบล็อกเซิร์ฟเวอร์สำหรับโฮสต์เริ่มต้นของคุณ สิ่งนี้สามารถทำได้โดยการเพิ่ม 'เริ่มต้น' ลงในฟังคำสั่ง นอกจากนี้เป็นเรื่องปกติที่จะใช้ server_name ซึ่งจะไม่ตรงกับชื่อจริงใด ๆ - โดยทั่วไปจะเป็นเครื่องหมายขีดล่าง ("_") แต่อักขระอื่น ๆ ก็สามารถใช้ได้เช่นกัน หากคุณไม่ใช้พารามิเตอร์เริ่มต้นบล็อกเซิร์ฟเวอร์แรกจะถือเป็นค่าเริ่มต้น (ดูคู่มือของ nginx เกี่ยวกับ server_namesสำหรับข้อมูลเพิ่มเติม)

ค่าเริ่มต้น ('ดั้งเดิม' ในบริบทนี้) การกำหนดค่า nginx อาจรวมบล็อกเซิร์ฟเวอร์เริ่มต้น (catch-all) ใน nginx.conf ซึ่งคุณสามารถกำหนดค่าได้

สำหรับข้อผิดพลาดที่สองตรวจสอบให้แน่ใจว่ามีการกำหนด 'main' ใน nginx.conf (บรรทัดควรเริ่มต้นด้วย 'log_format main ... ' (และแน่นอนตรวจสอบวงเล็บของคุณ) คุณสามารถละเว้นบรรทัด 'access_log' ทั้งหมด หากคุณไม่ต้องการให้คำขอไปยังเซิร์ฟเวอร์เริ่มต้นของคุณเพื่อเข้าสู่ระบบ (หรือสามารถเปลี่ยนรูปแบบโดยกำหนดรูปแบบใหม่)


นั่นเร็วมาก. ขอบคุณ พรุ่งนี้จะลองทำสิ่งนี้หลังจากนอนหลับนิดหน่อย ;-)
Ulf Klose

การใช้ _ เนื่องจาก server_name ไม่ได้เพิ่มใน "defaultness" ของเซิร์ฟเวอร์ {} เป็นเพียงการใช้เพื่อป้องกันไม่ให้ catchall ขัดแย้งกับบล็อกเซิร์ฟเวอร์อื่น ๆ ดังนั้นจึงไม่มี 'การแทนที่' เกี่ยวกับการตั้งค่าสถานะเริ่มต้นบนคำสั่งการฟัง มันเป็นเพียงสิ่งเดียวที่ทำเครื่องหมายเซิร์ฟเวอร์ไว้อย่างชัดเจนว่าเป็นค่าเริ่มต้น ถึงกระนั้น +1
kolbyjack

@ kolbyjack - ขอบคุณสำหรับการแก้ไข - ฉันจะแก้ไขในคำตอบของฉัน
cyberx86

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