เพิ่ม Domain และ HTTPS ให้ Container ด้วย Nginx Proxy Manager

หลังจากติดตั้ง Nginx Proxy Manager (NPM) เรียบร้อยแล้ว ขั้นตอนต่อไปคือการตั้งค่า Proxy Host เพื่อเชื่อมโยง Domain เข้าหา Container และเปิด HTTPS ด้วย Let’s Encrypt โดยไม่ต้องเขียนโค้ดสักบรรทัด

เตรียมความพร้อมก่อน

ก่อนเริ่มตั้งค่า Proxy Host ตรวจสอบให้แน่ใจว่า:

  1. Domain ชี้ A Record มายัง IP เซิร์ฟเวอร์แล้ว (รอ DNS Propagate หากทำใหม่)
  2. Container ที่ต้องการ Proxy อยู่ใน Network เดียวกับ NPM
  3. NPM รันอยู่และเข้าถึง Admin UI ได้

ตั้งค่า Proxy Host

เข้าสู่ Admin UI (http://server-ip:81) แล้วทำตามขั้นตอน:

  1. คลิก HostsProxy Hosts
  2. คลิกปุ่ม Add Proxy Host
  3. กรอก Domain Name เช่น blog.example.com
  4. ตั้งค่า Forward Hostname เป็นชื่อ Service ใน Docker (เช่น wordpress)
  5. ตั้งค่า Forward Port เป็น Port ที่ Container รับฟัง (เช่น 80)
  6. เปิด Block Common Exploits
Field ค่าตัวอย่าง ความหมาย
Domain Names blog.example.com ชื่อ Domain ที่ต้องการ
Forward Hostname/IP wordpress ชื่อ Service ใน Docker
Forward Port 80 Port ที่ Container รับฟัง
Block Common Exploits เปิด ป้องกัน Common Attacks

เปิด SSL / HTTPS

ในหน้าตั้งค่า Proxy Host เดียวกัน คลิกแท็บ SSL แล้วตั้งค่า:

  • SSL Certificate: เลือก “Request a new SSL Certificate”
  • เปิด Force SSL — บังคับ HTTP เป็น HTTPS อัตโนมัติ
  • เปิด HTTP/2 Support — ปรับปรุงความเร็ว
  • ใส่อีเมลสำหรับ Let’s Encrypt
  • ติ๊ก “I Agree to the Let’s Encrypt Terms of Service”
  • คลิก Save

NPM จะขอ SSL Certificate จาก Let’s Encrypt โดยอัตโนมัติ ใช้เวลาประมาณ 1-2 นาที

ข้อควรระวัง: Forward Hostname

ค่า Forward Hostname ต้องใช้ชื่อ Service ใน Docker ไม่ใช่ localhost หรือ IP เพราะ NPM อยู่ใน Container แยก localhost คือ NPM เอง ไม่ใช่ WordPress

# ถูกต้อง ✓
Forward Hostname: wordpress       # ชื่อ Service ใน docker-compose.yml
Forward Hostname: my-app          # Service อื่น

# ผิด ✗
Forward Hostname: localhost       # นี่คือ NPM Container เอง
Forward Hostname: 127.0.0.1      # เหมือนกัน

ปรับแต่ง Advanced Config (ถ้าต้องการ)

ในแท็บ Advanced สามารถเพิ่ม Nginx Config เพิ่มเติมได้ เช่น:

# ตัวอย่าง: เพิ่ม Headers สำหรับ WordPress
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 64M;

สรุปการตั้งค่า Proxy Host

ขั้นตอน รายละเอียด
1. Details Tab ใส่ Domain + Forward Host/Port
2. SSL Tab เลือก Request SSL + Force SSL
3. Save NPM ขอ Certificate อัตโนมัติ
4. ทดสอบ เปิด https://yourdomain.com

บทความถัดไป เราจะสำรวจเรียนรู้ Traefik ซึ่งเป็น Reverse Proxy อีกตัวเลือกที่นิยม โดยเฉพาะสำหรับ DevOps เพราะใช้ระบบ Labels ใน Docker ในการตั้งค่า ไม่ต้องเข้าหน้าเว็บ UI เลย