ใช้ Nginx Reverse Proxy จัดเส้นทางไปยัง Backend อย่างเป็นระบบ
วาง Nginx เป็นด่านหน้ารับโดเมนและ HTTPS ก่อนส่ง request ไปยัง backend พร้อมตั้ง header และ timeout ให้แอปได้รับข้อมูลต้นทางอย่างถูกต้อง

ภาพรวม
หลายคนใช้ Nginx แค่เสิร์ฟเว็บ แต่ของจริงที่ทรงพลังมากคือ Reverse Proxy 🚀
มันช่วย “ซ่อน” backend ไว้หลังประตูเดียว และจัดเส้นทาง request ได้เนียนมาก 🌐
ภาพง่ายๆ คือผู้ใช้เห็นแค่ Nginx ส่วน service ด้านหลังอาจมีหลายตัว ทั้ง Node.js, Python, Go, PHP หรือ container หลายกอง 🧩
ข้อดีสำคัญคือ backend ไม่ต้องเปิดออกอินเทอร์เน็ตตรงๆ 🔒 Nginx รับ request ก่อน แล้วค่อยส่งต่อไปยัง service ที่เกี่ยวข้อง
แบบนี้ช่วยลดพื้นที่เสี่ยงได้เยอะ เพราะ public IP ที่คนภายนอกคุยด้วยมีแค่ Nginx ตัวเดียว 🛡️
ตัวอย่างการซ่อน backend ที่เจอบ่อย Frontend อยู่ที่ myapp.com API อยู่ที่ myapp.com/api Admin อยู่ที่ myapp.com/admin แต่จริงๆ ข้างหลังอาจวิ่งคนละ port กันทั้งหมด ⚙️
เช่น เว็บหลักวิ่งที่ 3000 API วิ่งที่ 4000 Admin วิ่งที่ 5000 ผู้ใช้ไม่เคยรู้เลข port เหล่านี้เลย 👀
Nginx จะทำหน้าที่ map route ให้ คนเข้า / ก็ส่งไป 3000 คนเข้า /api ก็ส่งไป 4000 คนเข้า /admin ก็ส่งไป 5000 ✨
แนวคิด config แบบย่อ server_name myapp.com location / ส่งต่อไป frontend location /api ส่งต่อไป backend api location /admin ส่งต่อไป admin panel
จุดที่มือใหม่มักไม่รู้คือ path มีผลมาก ถ้า proxy_pass ลงท้ายต่างกัน ปลายทางที่ backend ได้ อาจไม่เหมือนเดิม 🤯
ยกตัวอย่าง เข้า /api/users บาง config จะส่งต่อเป็น /users แต่บาง config จะส่งต่อเป็น /api/users ต่างกันนิดเดียว แต่ระบบพังได้เลย 🧠
อีกเรื่องที่สำคัญมากคือ header backend หลายตัวต้องรู้ว่า request เดิมมาจาก host ไหน มาจาก ip ไหน และใช้ http หรือ https 📦
ค่าที่นิยมส่งต่อมี Host X-Real-IP X-Forwarded-For X-Forwarded-Proto
ถ้าไม่ส่ง header พวกนี้ backend อาจสร้าง URL callback ผิด redirect เพี้ยน หรือ log ip ของผู้ใช้ไม่ถูกต้อง ⚠️
Nginx ยังช่วยแยกหลายระบบให้อยู่โดเมนเดียวกันได้สวยมาก เหมาะกับงาน microservices หรือระบบที่ค่อยๆ โต 🏗️
ตัวอย่าง route ที่ใช้จริงบ่อย / ไปหน้าเว็บหลัก /api ไปบริการ API /socket ไป websocket server /static ไปไฟล์ asset /internal ไป service ภายในที่ไม่อยากเปิดตรงๆ 🔌
ถ้าทำร่วมกับ Docker จะยิ่งเห็นภาพชัด container แต่ละตัวเปิดแค่ใน network ภายใน Nginx ตัวเดียวเป็นด่านหน้ารับ traffic ทั้งหมด 🐳
ผลดีอีกอย่างคือย้าย backend ได้โดยที่ผู้ใช้ไม่รู้ วันนี้ API อยู่เครื่อง A พรุ่งนี้ย้ายไปเครื่อง B แค่เปลี่ยนปลายทางใน Nginx หน้าเว็บยังใช้ URL เดิมได้ต่อเนื่อง 🔄
และยังใช้ทำ load balancing เบื้องต้นได้อีก ถ้ามี API หลาย instance Nginx กระจาย request ไปหลายเครื่องได้ ⚡
เรื่องความปลอดภัยที่คนมองข้าม Reverse Proxy ช่วยบังคับ HTTPS จุดเดียวได้ ติด rate limit block บาง path ตั้งค่า auth เพิ่มหน้าบ้านก่อนถึง backend ได้ 🚧
พูดอีกแบบ backend ควรเป็นคนทำงาน ส่วน Nginx เป็นคนเฝ้าประตู คัดกรอง และพาแขกไปห้องที่ถูกต้อง 🏢
ตัวอย่างภาพจำง่ายๆ myapp.com/ → frontend:3000 myapp.com/api → api:4000 myapp.com/admin → admin:5000 myapp.com/socket → ws:6001
ผู้ใช้เห็นเป็นเว็บเดียว แต่ทีมพัฒนาแยก deploy เป็นหลาย service ได้สบายมาก 😎
ทริคเล็กๆ ที่ช่วยลดปัญหาในโปรดักชัน กำหนด timeout ให้เหมาะ เปิด access log ตอน debug เช็ก path rewrite ให้ชัด และทดสอบ redirect หลังบ้านทุกครั้ง 🧪
ถ้า backend บอกว่า route ไม่เจอ หลายครั้งปัญหาไม่ได้อยู่ที่โค้ด แต่อยู่ที่ Nginx ส่ง path ไปไม่ตรงตามที่ backend คาดไว้ 🧯
อีกเรื่องที่มีประโยชน์มาก Nginx ทำหน้า maintenance ชั่วคราวได้ เวลา backend ปิดปรับปรุง ระบบหน้าบ้านยังดูเป็นมืออาชีพได้เหมือนเดิม 🛠️
สรุปสั้นๆ Reverse Proxy ไม่ได้แค่ส่งต่อ request แต่มันช่วยซ่อนโครงสร้างจริงของระบบ รวมหลาย backend ไว้หลัง URL เดียว ควบคุม route ได้ละเอียด และเพิ่มทั้งความปลอดภัยกับความยืดหยุ่นในการ deploy 📚
ใครทำเว็บหรือ API แล้วเริ่มมีหลาย service เข้าใจ Nginx ส่วนนี้เมื่อไร งานจัดระบบหลังบ้านจะง่ายขึ้นแบบรู้สึกได้ทันที 🔥
แนวทางนำไปใช้
- นำแนวคิดจากโพสต์นี้ไปทดลองกับงานจริงของคุณ
- แยกเป็นขั้นตอนเล็ก ๆ แล้วทำทีละส่วน
- บันทึกผลลัพธ์และสิ่งที่เรียนรู้เพื่อต่อยอด
สรุป
วาง Nginx เป็นด่านหน้ารับโดเมนและ HTTPS ก่อนส่ง request ไปยัง backend พร้อมตั้ง header และ timeout ให้แอปได้รับข้อมูลต้นทางอย่างถูกต้อง