🔁 Nginx ทำ Reverse Proxy และ Load Balancing ยังไง?
Nginx ไม่ได้เป็นแค่ Web Server สำหรับเสิร์ฟ Static เท่านั้น
แต่มันยังเป็น Reverse Proxy และ Load Balancer ที่ทรงพลังมากอีกด้วย
บทความนี้จะอธิบายว่า Reverse Proxy คืออะไร, Load Balancing ทำงานยังไง และตัวอย่างการตั้งค่าจริงใน Nginx
📌 Reverse Proxy คืออะไร?
Reverse Proxy คือ “พร็อกซีฝั่งเซิร์ฟเวอร์” ที่คอยรับคำขอจากผู้ใช้ แล้วส่งต่อไปยัง Backend Server ตัวอื่นๆ
เหมือนเป็น “หน้าด่าน” ที่รับทั้งหมดแล้วจัดการหลังบ้านให้
ประโยชน์:
- 📡 ซ่อนตัวตนของ Backend
- 🔒 รองรับ SSL แค่ฝั่งหน้าเดียว
- 📊 ตรวจสอบ / Logging ง่าย
- ⚡ สามารถทำ Cache หรือ GZIP ได้ที่เดียว
⚙️ ตัวอย่าง Reverse Proxy ด้วย Nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
⚖️ Load Balancing คืออะไร?
Load Balancer คือสิ่งที่กระจายโหลดคำขอไปยัง Backend หลายตัว ช่วยให้ระบบรองรับผู้ใช้จำนวนมากได้ดีขึ้น
รูปแบบที่นิยม:
- 🔁 Round Robin: แจกจ่ายแบบสลับคิว
- 💡 Least Connections: เลือก Server ที่ว่างที่สุด
- 🧠 IP Hash: ผูก IP เดิมกับ Server เดิม
🧪 ตัวอย่าง Load Balancing ด้วย Nginx
upstream backend_servers {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
🛠 เทคนิคเสริมแบบละเอียด
1️⃣ SSL Termination (HTTPS → HTTP)
ทำให้ Nginx รับ HTTPS แล้วส่ง HTTP ไปหลังบ้าน ช่วยลดภาระการเข้ารหัสของ Backend
server {
listen 443 ssl;
server_name myapp.com;
ssl_certificate /etc/letsencrypt/live/myapp.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp.com/privkey.pem;
location / {
proxy_pass http://backend_servers;
proxy_set_header X-Forwarded-Proto https;
}
}
2️⃣ Failover Server
ตั้งค่ารองรับกรณีเซิร์ฟเวอร์หลักล่ม โดยใช้คำว่า backup
upstream backend {
server 192.168.1.100;
server 192.168.1.101 backup;
}
3️⃣ Connection Timeout / Retry
proxy_connect_timeout 5s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
4️⃣ Load Balancing ด้วย Least Connections
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
5️⃣ IP Hash (Sticky Session)
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
6️⃣ Health Check (ใช้กับ Nginx Plus หรือ third-party module)
Open Source Nginx ไม่มี built-in health check
แต่สามารถใช้ script ตรวจสอบผ่าน CRON หรือ Combine กับ Keepalived
🎯 สรุป
Nginx เป็น Web Server ที่ยืดหยุ่นมากที่สุดตัวหนึ่ง
นอกจากจะให้บริการเว็บไซต์ได้อย่างรวดเร็วแล้ว ยังทำหน้าที่เป็น Reverse Proxy และ Load Balancer ได้อย่างมีประสิทธิภาพ
หากคุณกำลังทำระบบแบบ Microservice หรือมี Backend หลายตัว → ลองใช้ Nginx เป็น Gateway แล้วคุณจะติดใจ!
🐧 LinuxSEA – เรียนรู้ เติบโต และแบ่งปัน บนเส้นทางของโอเพ่นซอร์ส