การจัดการ Nginx แบบ Modular คือการแยกส่วนประกอบของ Configuration ออกเป็นไฟล์ย่อย ๆ เพื่อให้ง่ายต่อการดูแลรักษา ( Maintainability ) และลดความเสี่ยงในการทำระบบพังทั้งแผงเมื่อมีการแก้ไข
🏗️ โครงสร้างแบบ Modular: อะไรอยู่ตรงไหน ?
ในการทำ Modular เราจะแบ่งชั้นของ Config ตามลำดับความสำคัญ ( Hierarchy ) ดังนี้ครับ
Global Settings ( มีได้จุดเดียวในระดับชั้นนั้น )
สิ่งเหล่านี้มักอยู่ใน /etc/nginx/nginx.conf และเป็นค่าที่ “คุมทั้งเครื่อง” ไม่สามารถประกาศซ้ำซ้อนได้
user: สิทธิ์ของผู้ใช้งานที่รัน process ( เช่นwww-data)worker_processes: จำนวน CPU cores ที่ใช้events { ... }: บล็อกที่กำหนดการจัดการ Connection ( มีได้อันเดียวในไฟล์หลัก )http { ... }: บล็อกหลักที่คลุม Web Service ทั้งหมด ( ห้ามมีซ้ำ )
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 ไหนเลย
- กฎเหล็ก: ในหนึ่ง “IP:Port” ( เช่น
80) จะมีdefault_serverได้เพียง 1 ไฟล์เท่านั้น - การตั้งชื่อ: แนะนำให้ตั้งชื่อไฟล์ว่า
000-default.confเพื่อให้ Nginx โหลดไฟล์นี้เป็นอันดับแรกตามลำดับตัวอักษร
server {
listen 80 default_server;
server_name _; # รับทุกชื่อที่ไม่ได้ระบุไว้ที่อื่น
# ตอบกลับด้วย Empty Response (444) เพื่อประหยัด Bandwidth จาก Bot
return 444;
}
🧩 ส่วนประกอบที่แยกเป็น Module ได้ ( Snippets )
นอกจากแยกตาม Domain แล้ว เรายังสามารถแยก “ฟีเจอร์” ออกเป็นไฟล์ย่อยเพื่อ include ซ้ำได้ เช่น
- 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;
- Proxy Headers (
/etc/nginx/snippets/proxy-params.conf)
ใช้เมื่อต้องการส่งต่อ Request ไปยัง Node.js, Python หรือ Dockerproxy_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
- ย้าย Config เฉพาะส่วนไปไว้ในโฟลเดอร์
conf.d/หรือsites-available/ - เชื่อมโยง ( Symlink ) ไฟล์จาก
sites-availableไปยังsites-enabled - ตรวจสอบ ด้วย
nginx -tเพื่อหาจุดที่มีdefault_serverซ้ำซ้อน - สั่งรัน ด้วย
reload
อ่านเพิ่มเติม