Back to notes
mastery-platform-devops
Featured

Nginx & Reverse Proxy: ยามเฝ้าประตูระดับโลก

ทำไมโปรเจกต์ระดับมืออาชีพถึงต้องมี Nginx? เจาะลึกความลับของ Reverse Proxy ตั้งแต่การทำ SSL Termination ไปจนถึงการกระจายงาน (Load Balancing) ที่ทำให้ระบบไม่เคยล่ม

January 30, 20263 min read readNNexis by Seereen

🛑 1. The Problem First: "Backend ที่เปลือยกายกลางสายฝน"

ลองนึกถึงวันที่คุณรันโปรเจกต์ Express.js หรือ Next.js บนเซิร์ฟเวอร์โดยตรงที่ Port 3000:

HLJS BASH
# ❌ Naive Approach: เปิด Application Port ให้โลกพุ่งเข้ามาตรงๆ
http://203.14.xx.xx:3000/api/users
# 🌋 พัง! เมื่อมีคนยิง Request เข้ามาเป็นล้านพร้อมกัน Backend ของคุณจะค้างเพราะทำงานไม่ทัน
# หรือหากคุณต้องการย้าย App ไปเครื่องอื่น ผู้ใช้ทศวรรษหน้าก็ยังต้องจำ Port 3000 อยู่
# แถมการจัดการ HTTPS บนตัว App เองยังกินทรัพยากร (CPU) และจัดการยากมหาศาล

ปัญหา: การเปิดรับ Request โดยตรงจากโลกภายนอกคือการ "โชว์จุดอ่อน" ของระบบ Backend ของคุณมักจะไม่ถูกออกแบบมาเพื่อจัดการเรื่องความปลอดภัยขั้นสูง, การอ่านไฟล์ Static จำนวนมาก, หรือการกระจายงาน (Load Balancing) นี่คือสาเหตุที่เราต้องการ "ด่านหน้า" ที่แข็งแกร่งครับ


💡 2. Real-Life Analogy: พนักงานต้อนรับที่โรงแรม 5 ดาว

  • The Reverse Proxy (Nginx): เหมือน "พนักงานต้อนรับ (Concierge)". แขกทุุกคนที่เข้ามาโรงแรมไม่ต้องวิ่งไปหาเจ้าของโรงแรม (Backend) โดยตรง ทุุกคนต้องคุยกับพนักงานต้อนรับก่อน เขามีหน้าที่ตรวจสอบบัตร (SSL/HTTPS), ถามความต้องการ (Routing) และบอกทางไปห้องพัก
  • Load Balancing: เหมือน "การจัดคิวแท็กซี่". เมื่อมีแขกออกมายืนรอเยอะๆ พนักงานจะคอยกวักมือเรียกแท็กซี่ (Backend Server) คันที่ว่างอยู่มารับแขกทีละคน เพื่อไม่ให้คันไหนคันหนึ่งทำงานหนักเกินไป
  • Static Content Caching: เหมือน "ขนมที่วางไว้ให้หยิบฟรีที่ล็อบบี้". ถ้าแขกแค่ต้องการกระดาษทิชชู่ (ไฟล์รูป) พนักงานหยิบให้ทันทีที่เคาน์เตอร์ ไม่ต้องวิ่งขึ้นไปเอาที่ห้องพักชั้น 20 (Backend Logic)

🚀 3. Execution Journey: มหากาพย์การสร้างด่านหน้า (The Config)

Senior จะใช้ Nginx เป็นตัว "ครอบ" (Wrapper) เพื่อความยืดหยุ่นและการรักษาความปลอดภัย

🛠 Step-by-step:

  1. The Guard (SSL Termination): ให้ Nginx จัดการใบรับรอง HTTPS ที่หน้าเดียว แล้วคุยกับ App ข้างหลังด้วย HTTP ธรรมดา (เบาแรง App)
  2. The Disguise (Port Hiding): ซ่อน Port จริงของ App ไว้ แล้วให้คนเข้าผ่าน Port 80/443 มาตรฐานเท่านั้น
  3. The Buffer (Rate Limiting): ตั้งค่ากันคนยิงถล่ม (DDoS) เบื้องต้นที่ชั้นของ Nginx
  4. The Performance (Static Serve): สั่งให้ Nginx ส่งไฟล์รูป/CSS เองเลย ไม่ต้องรบกวน Node.js
HLJS NGINX
# ✅ Best Practice: Nginx Config ระดับ Production
server {
    listen 443 ssl;
    server_name api.myapp.com;

    # 🛠 1. SSL จัดการที่นี่ที่เดียว (Backend สบาย)
    ssl_certificate /path/to/cert;

    # 🛠 2. ส่งต่อให้ App ข้างหลัง (Reverse Proxy)
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr; # 🩺 บอก App ว่าใครคือคนยิงมาจริงๆ
    }

    # 🛠 3. ส่งไฟล์รูปเอง (เร็วกว่า Node.js 10 เท่า)
    location /images/ {
        root /var/www/static;
        expires 30d;
    }
}

🪤 4. The Junior Trap: โรค "Hardcode IP ในหน้าบ้าน"

จูเนียร์มักจะเขียน URL ในโค้ด Frontend เป็น IP ของเซิร์ฟเวอร์ตรงๆ:

HLJS JAVASCRIPT
// ❌ Junior Trap: เรียก API ด้วย IP และ Port
const API_URL = "http://203.14.xx.xx:3000";
// 🌋 พัง! เมื่อไหร่ก็ตามที่คุณย้ายเซิร์ฟเวอร์ หรือเปลี่ยน Port App
// คุณต้องไล่แก้ทุุกจุดใน Frontend และ User จะเจอแจ้งเตือน Browser เรื่อง "Not Secure" (No HTTPS)

ระวัง: ความลับของความยืดหยุ่นคือ "Domain Name" และ "Standard Port" ✅ การแก้ไข: ใช้ Nginx ทำหน้าที่เป็นทางเข้าทางเดียวผ่าน Domain (เช่น api.myapp.com) แล้วคุณจะย้ายเครื่องกี่รอบก็ได้โดยไม่มีใครรู้ครับ


⚖️ 5. The Why Matrix: Direct Access vs Nginx vs Cloudflare

หัวข้อยิงตรง (Direct)มี Nginx (Senior)Cloudflare (Global)
ความปลอดภัย🐢 ต่ำมาก (โชว์ขี้หน้า)⚡⚡ สูง (ซ่อนตัวจริง)🚀 สูงสุด (ทอกซ์ไฟร์วอลล์)
ความเร็วไฟล์ Staticช้า (กิน RAM Backend)⚡⚡⚡ เร็ว (OS Optimized)🚀 เร็วที่สุด (CDN)
การจัดการ HTTPSยากนรก (ต้องทำรายวัน)⚡⚡ ง่ายมาก (Certbot)🚀 คลิกเดียวจบ
ราคาฟรี⚡ ราคาถูก (ใช้ RAM นิดเดียว)เสียตังค์ (ถ้างานเยอะ)

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมองว่า "เราไม่เคยปล่อยให้ Backend คุยกับอินเทอร์เน็ตโดยตรง". Nginx ไม่ใช่แค่ตู้ทางผ่าน แต่มันคือปราการด่านสุดท้ายที่ทำหน้าเป็นกระบอกเสียงให้ระบบของคุณพูดคุยกับโลกภายนอกได้อย่างสง่างามและปลอดภัยครับ!

Share this note

Mission Accomplished

You've reached the end of this module. Time to apply these senior mindsets to your real-world projects!

Explore more topics

© 2026 My Notes by Seereen