หลายบริการหลังเซิร์ฟเวอร์เดียวด้วย Nginx Proxy Manager
เมื่อเซิร์ฟเวอร์เครื่องเดียวรันหลายโปรเจกต์ สุดท้ายก็จะชนกับพอร์ต 80 และ 443 ซึ่งมีได้เพียงโปรเซสเดียวที่รับฟังได้ บทความบน Habr จากบล็อกของ Selectel แสดงทีละขั้นตอนว่าจะแก้ปัญหานี้ด้วย Nginx Proxy Manager ได้อย่างไร
ผู้เขียนอธิบายปัญหาก่อน ได้แก่ พอร์ตที่ต้องมีสิทธิ์พิเศษ กฎ 'หนึ่งพอร์ตต่อหนึ่งตัวรับฟัง' ปัญหา CORS เมื่อแยกฟรอนต์เอนด์และแบ็กเอนด์ด้วยพอร์ตต่างกัน และการไม่มี HTTPS รีเวิร์สพร็อกซีแก้ปัญหานี้ได้โดยทำหน้าที่เป็นตัวกลางและส่งต่อทราฟฟิกตามโดเมนและพาธ ข้อดีเพิ่มเติมคือไฟร์วอลล์เปิดแค่พอร์ต 22, 80 และ 443 ก็พอ
สภาพแวดล้อมทดสอบคือ VDS ขนาด 2 vCPU, RAM 2 GB และ NVMe 40 GB รันด้วย Ubuntu 24.04 และ Docker จากรีโพซิทอรีทางการ สร้างเครือข่ายด้วยคำสั่ง docker network create proxy แล้วเริ่มคอนเทนเนอร์ jc21/nginx-proxy-manager พร้อมวอลุ่มสำหรับข้อมูลและใบรับรอง ผมชอบที่หน้าจอแอดมินบนพอร์ต 81 ผูกไว้กับ 127.0.0.1 เท่านั้น และเข้าถึงผ่านอุโมงค์ SSH
จากนั้นตั้งค่าโฮสต์พร็อกซี โดยใส่ชื่อคอนเทนเนอร์ในช่อง Forward Hostname และผูกใบรับรอง SSL ในแท็บ SSL ใช้ traefik/whoami ในการทดสอบ นอกจากนี้ยังอธิบายกรณีที่แอปรันบนโฮสต์โดยตรง โดยดึงที่อยู่เกตเวย์ของเครือข่าย Docker ด้วย docker network inspect และตั้งไฟร์วอลล์ไม่ให้เข้าถึงแอปโดยข้ามพร็อกซีได้
มีข้อสังเกตบางส่วน ตัวอย่างปนโดเมนหลายชื่อ และอิมเมจใช้แท็ก latest ซึ่งอาจทำให้ทำซ้ำผลได้ยากขึ้นเมื่อเวลาผ่านไป อย่างไรก็ตาม นี่เป็นจุดเริ่มต้นที่ดีสำหรับคนที่อยากรันหลายบริการที่บ้านหรือบน VDS โดยไม่ต้องแก้ไขคอนฟิก nginx ด้วยมือ
ที่มา: Habr (บล็อก Selectel)
ผู้เขียนอธิบายปัญหาก่อน ได้แก่ พอร์ตที่ต้องมีสิทธิ์พิเศษ กฎ 'หนึ่งพอร์ตต่อหนึ่งตัวรับฟัง' ปัญหา CORS เมื่อแยกฟรอนต์เอนด์และแบ็กเอนด์ด้วยพอร์ตต่างกัน และการไม่มี HTTPS รีเวิร์สพร็อกซีแก้ปัญหานี้ได้โดยทำหน้าที่เป็นตัวกลางและส่งต่อทราฟฟิกตามโดเมนและพาธ ข้อดีเพิ่มเติมคือไฟร์วอลล์เปิดแค่พอร์ต 22, 80 และ 443 ก็พอ
สภาพแวดล้อมทดสอบคือ VDS ขนาด 2 vCPU, RAM 2 GB และ NVMe 40 GB รันด้วย Ubuntu 24.04 และ Docker จากรีโพซิทอรีทางการ สร้างเครือข่ายด้วยคำสั่ง docker network create proxy แล้วเริ่มคอนเทนเนอร์ jc21/nginx-proxy-manager พร้อมวอลุ่มสำหรับข้อมูลและใบรับรอง ผมชอบที่หน้าจอแอดมินบนพอร์ต 81 ผูกไว้กับ 127.0.0.1 เท่านั้น และเข้าถึงผ่านอุโมงค์ SSH
จากนั้นตั้งค่าโฮสต์พร็อกซี โดยใส่ชื่อคอนเทนเนอร์ในช่อง Forward Hostname และผูกใบรับรอง SSL ในแท็บ SSL ใช้ traefik/whoami ในการทดสอบ นอกจากนี้ยังอธิบายกรณีที่แอปรันบนโฮสต์โดยตรง โดยดึงที่อยู่เกตเวย์ของเครือข่าย Docker ด้วย docker network inspect และตั้งไฟร์วอลล์ไม่ให้เข้าถึงแอปโดยข้ามพร็อกซีได้
มีข้อสังเกตบางส่วน ตัวอย่างปนโดเมนหลายชื่อ และอิมเมจใช้แท็ก latest ซึ่งอาจทำให้ทำซ้ำผลได้ยากขึ้นเมื่อเวลาผ่านไป อย่างไรก็ตาม นี่เป็นจุดเริ่มต้นที่ดีสำหรับคนที่อยากรันหลายบริการที่บ้านหรือบน VDS โดยไม่ต้องแก้ไขคอนฟิก nginx ด้วยมือ
ที่มา: Habr (บล็อก Selectel)
ความคิดเห็น 0
เป็นคนแรกที่แสดงความคิดเห็น ด้วยภาษาใดก็ได้
เข้าสู่ระบบเพื่อแสดงความคิดเห็น