ป้ายกำกับ: Features

Nginx แบบแยก Configuration ออกเป็นไฟล์ย่อย ๆNginx แบบแยก Configuration ออกเป็นไฟล์ย่อย ๆ

การจัดการ Nginx แบบ Modular คือการแยกส่วนประกอบของ Configuration ออกเป็นไฟล์ย่อย ๆ เพื่อให้ง่ายต่อการดูแลรักษา และลดความเสี่ยงในการทำระบบพังทั้งแผงเมื่อมีการแก้ไข

🏗️ โครงสร้างแบบ Modular: อะไรอยู่ตรงไหน ?

ในการทำ Modular เราจะแบ่งชั้นของ Config ตามลำดับความสำคัญ ดังนี้ครับ

Global Settings

สิ่งเหล่านี้มักอยู่ใน /etc/nginx/nginx.conf และเป็นค่าที่ “คุมทั้งเครื่อง” ไม่สามารถประกาศซ้ำซ้อนได้

  • user: สิทธิ์ของผู้ใช้งานที่รัน process
  • worker_processes: จำนวน CPU cores ที่ใช้
  • events { ... }: บล็อกที่กำหนดการจัดการ Connection
  • http { ... }: บล็อกหลักที่คลุม Web Service ทั้งหมด

The include Command

เราใช้คำสั่ง include เพื่อดึงไฟล์ย่อยมาประกอบร่าง ตัวอย่างใน nginx.conf

JavaScript

http { include /etc/nginx/mime.types; # โหลดไฟล์ประเภทไฟล์มาตรฐาน include /etc/nginx/conf.d/*.conf; # โหลดไฟล์เสริมอื่น ๆ include /etc/nginx/sites-enabled/*; # โหลดไฟล์ของแต่ละเว็บไซต์
}

🚩 Default Server

ในระบบที่มีหลายเว็บไซต์ (Virtual Hosts) Nginx จะต้องมี “ตัวรับแขก” หาก Request ที่วิ่งเข้ามาไม่ตรงกับ Domain ไหนเลย

  • กฎเหล็ก: ในหนึ่ง “IP:Port” จะมี default_server ได้เพียง 1 ไฟล์เท่านั้น
  • การตั้งชื่อ: แนะนำให้ตั้งชื่อไฟล์ว่า 000-default.conf เพื่อให้ Nginx โหลดไฟล์นี้เป็นอันดับแรกตามลำดับตัวอักษร

JavaScript

server { listen 80 default_server; server_name _; # รับทุกชื่อที่ไม่ได้ระบุไว้ที่อื่น # ตอบกลับด้วย Empty Response (444) เพื่อประหยัด Bandwidth จาก Bot return 444; }

🧩 ส่วนประกอบที่แยกเป็น Module ได้

นอกจากแยกตาม Domain แล้ว เรายังสามารถแยก “ฟีเจอร์” ออกเป็นไฟล์ย่อยเพื่อ include ซ้ำได้ เช่น

  1. SSL Settings
    เก็บค่าความปลอดภัย SSL ที่ดีที่สุดไว้ที่เดียว เมื่อมีการอัปเดตมาตรฐานความปลอดภัย ก็แก้แค่ไฟล์เดียว

    JavaScript

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    
  • Proxy Headers
    ใช้เมื่อต้องการส่งต่อ Request ไปยัง Node.js, Python หรือ Docker

    JavaScript

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

  • ⚡ คำสั่ง “Quick” สำหรับการจัดการ Modular

    คำสั่งหน้าที่
    nginx -tสำคัญที่สุด! ตรวจสอบ Syntax ก่อน Reload ถ้า Error จะบอกบรรทัดที่พัง
    nginx -Tแสดง Config ทั้งหมดที่ถูก include มาประกอบร่างกัน
    systemctl reload nginxใช้โหลด Config ใหม่โดยไม่หยุดการทำงาน

    💡 สรุปขั้นตอนการทำ Modular

    1. ย้าย Config เฉพาะส่วนไปไว้ในโฟลเดอร์ conf.d/ หรือ sites-available/
    2. เชื่อมโยง ไฟล์จาก sites-available ไปยัง sites-enabled
    3. ตรวจสอบ ด้วย nginx -t เพื่อหาจุดที่มี default_server ซ้ำซ้อน
    4. สั่งรัน ด้วย reload

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


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