Site icon PlusMagi's Blog By Pitt Phunsanit

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

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

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

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

Global Settings ( มีได้จุดเดียวในระดับชั้นนั้น )

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

The include Command ( หัวใจของ Modular )

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

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

🚩 Default Server ( ตัวจริงมีได้เพียงหนึ่ง )

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

server {
    listen 80 default_server;
    server_name _; # รับทุกชื่อที่ไม่ได้ระบุไว้ที่อื่น

    # ตอบกลับด้วย Empty Response (444) เพื่อประหยัด Bandwidth จาก Bot
    return 444; 
}

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

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

  1. SSL Settings ( /etc/nginx/snippets/ssl-params.conf )
    เก็บค่าความปลอดภัย SSL ที่ดีที่สุดไว้ที่เดียว เมื่อมีการอัปเดตมาตรฐานความปลอดภัย ก็แก้แค่ไฟล์เดียว
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    
  2. Proxy Headers ( /etc/nginx/snippets/proxy-params.conf )
    ใช้เมื่อต้องการส่งต่อ Request ไปยัง Node.js, Python หรือ Docker
    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 ใหม่โดยไม่หยุดการทำงาน ( แนะนำกว่า restart )

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

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

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

Exit mobile version