1. NGINX คืออะไร?
NGINX เป็นเว็บเซิร์ฟเวอร์แบบ asynchronous และ event-driven ที่มีความสามารถรองรับคำขอ (requests) จำนวนมากในเวลาเดียวกัน โดยไม่ต้องสร้าง process ใหม่ทุกครั้ง ซึ่งแตกต่างจากเว็บเซิร์ฟเวอร์แบบเก่า เช่น Apache ที่ใช้ model แบบ process-per-connection หรือ thread-per-request
NGINX ถูกพัฒนาโดย Igor Sysoev ในปี 2002 เพื่อแก้ปัญหา C10k (รองรับ 10,000 การเชื่อมต่อพร้อมกัน) และกลายเป็นหนึ่งในเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุดในโลก รองรับทั้ง HTTP, HTTPS, TCP และ UDP
2. ความสามารถหลักของ NGINX
2.1 Web Server
- ทำหน้าที่ให้บริการเว็บไซต์ (Static content เช่น HTML, CSS, JS หรือไฟล์ media)
- มีความเร็วในการเสิร์ฟไฟล์สูงกว่าหลายเซิร์ฟเวอร์
- ทำงานแบบ non-blocking ทำให้รองรับผู้ใช้พร้อมกันได้มาก
- รับ request จาก client แล้วส่งต่อให้ backend server (เช่น Node.js, PHP, Python, Go)
- ช่วยซ่อน IP ของ backend จริง
- สามารถ load balance backend หลายตัวได้
รองรับวิธีการกระจายโหลดหลากหลาย:
- Round Robin
- Least Connections
- IP Hash
- ทำหน้าที่แปลง HTTPS → HTTP เพื่อให้ backend ไม่ต้องจัดการ TLS เอง
- ลดภาระ CPU ของ backend
- เก็บ static content หรือผลลัพธ์จาก backend ไว้ที่ edge เพื่อลดภาระ backend และเพิ่มความเร็ว
3.1 Static Website Hosting
โค้ด: เลือกทั้งหมด
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
}
3.2 Reverse Proxy ไปยังแอป Node.js
โค้ด: เลือกทั้งหมด
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3.3 Load Balancing ไปยังหลาย backend
โค้ด: เลือกทั้งหมด
upstream backend_servers {
server 192.168.1.101;
server 192.168.1.102;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
3.4 HTTPS + HTTP to HTTPS Redirect
โค้ด: เลือกทั้งหมด
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
root /var/www/html;
index index.html;
}
}
4. ประโยชน์ของการใช้ NGINX
1. รองรับโหลดสูงได้อย่างมีประสิทธิภาพ
NGINX ออกแบบมาให้รองรับผู้ใช้งานพร้อมกันจำนวนมากโดยใช้หน่วยความจำและ CPU น้อยกว่าซอฟต์แวร์ประเภทเดียวกัน
2. ทำงานหลายบทบาทได้ในตัวเดียว
ไม่ต้องใช้หลายซอฟต์แวร์: NGINX เป็นได้ทั้ง web server, reverse proxy, load balancer, SSL terminator, และ cache server
3. ตั้งค่าที่ยืดหยุ่น
ไฟล์ config ของ NGINX เขียนง่ายและเข้าใจได้รวดเร็ว รองรับ conditional routing, regex, variable, upstream routing ฯลฯ
4. ปลอดภัยและเสถียร
NGINX มีการอัปเดตความปลอดภัยอย่างต่อเนื่อง และมีความเสถียรสูง สามารถทำงานได้ต่อเนื่องเป็นปีโดยไม่ต้อง restart
5. รองรับการทำงานร่วมกับ Docker และ Kubernetes
สามารถใช้ NGINX เป็น Ingress Controller สำหรับ Kubernetes หรือ frontend ของ container-based application ได้ง่าย
5. คำแนะนำในการนำ NGINX ไปใช้จริง
5.1 ใช้ TLS เสมอ
- ติดตั้ง Let’s Encrypt ร่วมกับ Certbot เพื่อได้ SSL certificate ฟรีและปลอดภัย
- ใช้ TLS 1.2 หรือสูงกว่า
- ปิด SSL เวอร์ชันเก่า (เช่น SSLv3)
โค้ด: เลือกทั้งหมด
gzip on;
gzip_types text/plain application/json;
5.3 ใช้ caching ให้เหมาะสม
- กำหนด cache header สำหรับ static file
- ใช้ proxy cache สำหรับ API หรือ HTML ที่โหลดบ่อยแต่เปลี่ยนไม่บ่อย
โค้ด: เลือกทั้งหมด
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
server {
location /api/ {
limit_req zone=req_limit burst=10;
}
}
5.5 แยกไฟล์ config ตามบริการ
หากมีหลายเว็บไซต์หรือหลายระบบ backend แนะนำให้แยกเป็นไฟล์ config ย่อยใน /etc/nginx/sites-available/ และ symlink ไปยัง /etc/nginx/sites-enabled/
5.6 ใช้ระบบ Monitoring
ติดตั้งเครื่องมืออย่าง nginx-prometheus-exporter, Grafana, หรือ Datadog เพื่อดูทราฟฟิกและสุขภาพระบบ
สรุป
NGINX ไม่ได้เป็นเพียงแค่เว็บเซิร์ฟเวอร์ แต่คือเครื่องมืออเนกประสงค์ที่สามารถตอบโจทย์สถาปัตยกรรมของระบบสมัยใหม่ได้อย่างรอบด้าน ไม่ว่าจะเป็นการให้บริการเนื้อหา, ทำ reverse proxy ไปยัง backend, กระจายโหลด, ทำ SSL termination หรือ caching, ข้อดีหลักของ NGINX คือประสิทธิภาพสูง การใช้ทรัพยากรต่ำ และความสามารถในการปรับแต่งอย่างยืดหยุ่น ทำให้สามารถนำไปใช้งานได้ทั้งในระดับเริ่มต้น ไปจนถึงระดับ enterprise, สำหรับผู้ที่เริ่มต้น แนะนำให้ลองใช้ NGINX เป็น reverse proxy หรือ web server ธรรมดาก่อน แล้วค่อย ๆ ขยายไปสู่ฟีเจอร์อื่น ๆ เช่น load balancing, caching และ security เมื่อระบบเติบโตขึ้น, สุดท้าย NGINX คือหนึ่งในเครื่องมือที่ควรมีติดคลังไว้ หากคุณต้องการสร้างระบบที่เร็ว ปลอดภัย และรองรับการเติบโตในอนาคตอย่างมั่นคง
อ้างอิง
https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/
https://docs.gitlab.com/omnibus/settings/nginx/
https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview