หมวดหมู่: Network

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

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


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

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

  1. Main Configuration
    ไฟล์หลักที่อยู่ที่ /etc/nginx/nginx.conf จะถูกโหลดเป็นอันดับแรก โดยภายในไฟล์นี้จะกำหนดค่าระดับ Global เช่น
    • User / Group ที่ใช้รัน Process
    • Worker Processes
    • Error 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/*: จะโหลดไฟล์ Virtual Host ที่เราทำ Symbolic link มาจาก sites-available

Server Blocks

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

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

Location Blocks

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

  1. =: ตรงกันเป๊ะ ๆ
  2. ^~: ตรงส่วนหน้า และหยุดหาต่อ
  3. ~ หรือ ~*: ตรงตาม Regular Expression
  4. /: ถ้าไม่ตรงกับอะไรเลย

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

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

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


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