ป้ายกำกับ: กำหนดการ

Nginx: กำหนดการโหลด ConfigurationNginx: กำหนดการโหลด Configuration

การเข้าใจลำดับการโหลด Configuration ของ Nginx เป็นเรื่องสำคัญมากครับ เพราะจะช่วยให้คุณไล่เช็คได้ว่าทำไม Setting ที่เราเขียนถึงไม่ทำงาน หรือทำไมเกิด Error เวลา Start service


🏗️ ลำดับการโหลด Configuration ของ Nginx

โดยปกติ Nginx จะเริ่มอ่านไฟล์จาก “บนลงล่าง” ตามโครงสร้างดังนี้ครับ

  1. Main Configuration ( nginx.conf )
    ไฟล์หลักที่อยู่ที่ /etc/nginx/nginx.conf จะถูกโหลดเป็นอันดับแรก โดยภายในไฟล์นี้จะกำหนดค่าระดับ Global เช่น
    • User / Group ที่ใช้รัน Process
    • Worker Processes ( จำนวน Core ที่ใช้ )
    • Error Log ( Path เก็บ log หลัก )
    • PID file
  2. The http Block
    ภายใน nginx.conf จะมี Block ที่ชื่อว่า http { ... } ซึ่งจะรวบรวมการตั้งค่าสำหรับ Web Traffic ทั้งหมด
    • การโหลด MIME Types
    • การตั้งค่า Log Format
    • Gzip compression
    • Include Statement: นี่คือจุดสำคัญที่ Nginx จะไปดึงไฟล์อื่นมาอ่านเพิ่ม
  3. Modular Configs ( ไฟล์แยกในโฟลเดอร์ต่าง ๆ )
    ใน http block มักจะมีคำสั่ง include เพื่อดึงไฟล์จากโฟลเดอร์อื่นมาประกอบร่างกัน โดยลำดับมาตรฐานคือ
  • /etc/nginx/conf.d/*.conf: มักใช้เก็บ Config เสริมทั่วไป
  • /etc/nginx/sites-enabled/*: ( ในระบบ Ubuntu/Debian ) จะโหลดไฟล์ Virtual Host ( Server Block ) ที่เราทำ Symbolic link มาจาก sites-available

Server Blocks ( Virtual Hosts )

เมื่ออ่านไฟล์เข้ามาแล้ว Nginx จะตัดสินใจเลือกใช้ server block ตามลำดับความสำคัญ ( Precedence ) ไม่ได้เรียงตามบรรทัดเสมอไป

  1. เช็คจาก IP Address และ Port ที่ตรงที่สุด
  2. เช็คจาก server_name ( ชื่อ Domain ) ที่ตรงกันแบบเป๊ะ ๆ
  3. เช็คจาก Wildcard (เช่น *.example.com)
  4. ถ้าไม่เจอเลย จะไปลงที่ default_server

Location Blocks ( ภายใน Server Block )

เมื่อเลือก Server ได้แล้ว Nginx จะดู URI ( Path ) ว่าจะให้ทำอะไรต่อ โดยเรียงลำดับความดังนี้

  1. =: ตรงกันเป๊ะๆ ( Exact Match )
  2. ^~: ตรงส่วนหน้า และหยุดหาต่อ ( Best Non-RegEx Match )
  3. ~ หรือ ~*: ตรงตาม Regular Expression ( Case sensitive / Insensitive )
  4. /: ถ้าไม่ตรงกับอะไรเลย ( Prefix Match )

💡 สรุปแผนผังการโหลด

ลำดับส่วนประกอบหน้าที่หลัก
1nginx.conf ( Global )ตั้งค่าพื้นฐานของ OS และ Process
2http Contextตั้งค่าการรับส่งข้อมูลเว็บและดึงไฟล์ Include
3server Blockแยกแยะตาม Domain Name หรือ IP
4location Blockจัดการ Request ตาม Path ( เช่น /api, /images )

ทุกครั้งหลังแก้ไขไฟล์เสร็จ ให้รันคำสั่ง sudo nginx -t เพื่อตรวจสอบ Syntax ก่อนสั่ง Reload เสมอครับ เพื่อป้องกัน Service พังจากความผิดพลาดในการพิมพ์


อ่านเพิ่มเติม