สร้าง Nginx Web Server ตัวกลางแบบ Sidecar Architecture เชื่อมต่อหลายโปรเจกต์ผ่าน Docker Networkสร้าง Nginx Web Server ตัวกลางแบบ Sidecar Architecture เชื่อมต่อหลายโปรเจกต์ผ่าน Docker Network

ในระบบพัฒนาซอฟต์แวร์ที่มีหลายโปรเจกต์รันอยู่พร้อม ๆ กัน (เช่น WordPress และ Laravel) การจัดการ Web Server และพอร์ตต่าง ๆ มักจะยุ่งยากหากต้องเปิดพอร์ตชนกันหลายตัว แนวทางที่ดีและเป็นระเบียบคือการสร้าง Nginx ตัวกลาง (Centralized Reverse Proxy) ขึ้นมาทำหน้าที่เป็นเซิร์ฟเวอร์หลักที่คอยรับทราฟฟิกจากภายนอก แล้วส่งต่อ (Proxy) ไปยังคอนเทนเนอร์ของแต่ละโปรเจกต์ผ่านเครือข่าย Docker ภายในที่ปลอดภัย

ในบทความนี้เราจะมาดูวิธีการจัดโครงสร้างโปรเจกต์และเขียนไฟล์คอนฟิกสำหรับรัน Nginx ตัวกลางในรูปแบบ Sidecar Architecture ครับ


โครงสร้างโปรเจกต์ (Project Structure)

เราสามารถแยกโฟลเดอร์สำหรับ Nginx ตัวกลางไว้อย่างเป็นระเบียบ เช่น /Users/common/Docker/reverse_proxy/ โดยมีโครงสร้างไฟล์ดังนี้

/Users/common/Docker/
├── .env                        <-- ไฟล์ตั้งค่าส่วนกลาง
.
└── server_nginx_1_30           <-- โครงสร้างฝั่ง Nginx ตัวกลาง
    ├── docker-compose.yml
    ├── nginx.conf
    └── conf.d/
        └── default.conf

ตัวอย่างไฟล์ docker-compose.yml

ไฟล์คอนฟิกหลักสำหรับสั่งรัน Nginx โดยดึงซอร์สโค้ดของแต่ละโปรเจกต์เข้ามาเชื่อมโยง (Mount) และเชื่อมต่อเข้ากับเครือข่ายภายนอกชื่อ magi ที่แชร์ร่วมกับสแต็กอื่น ๆ

services:
  server_nginx:
    image: nginx:1.31-alpine
    container_name: serv_nginx_1_31
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./conf.d:/etc/nginx/conf.d:ro
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
      - ./logs:/var/log/nginx
      - ../wordpress_71_dev/src:/var/www/wordpress_71:ro
      - ../laravel_app_13_0/src:/var/www/laravel_13:ro
    networks:
      - magi

networks:
  magi:
    name: magi
    external: true

วิธีการใช้งานและการเปิดระบบ

1. เข้าไปยังโฟลเดอร์ Nginx ตัวกลาง

เปิด Terminal แล้วเปลี่ยนเส้นทางไปยังโฟลเดอร์ที่เก็บไฟล์คอนฟิกของ Nginx

cd /Users/common/Docker/server_nginx_1_30

2. สั่งรันคอนเทนเนอร์

ใช้งาน Docker Compose เพื่อเปิดเซอร์วิส Nginx ขึ้นมาทำงานในรูปแบบ Background

docker compose up -d

จุดเด่นของสถาปัตยกรรมนี้

  • Single Entry Point
    ใช้พอร์ต 80 และ 443 บนเครื่องโฮสต์เพียงจุดเดียว ควบคุมทุกเว็บไซต์ได้จากที่นี่
  • Isolated & Shared Network
    ใช้ Docker Network magi ร่วมกับเซอร์วิส PHP และ Database ของแต่ละโปรเจกต์ ทำให้ Nginx สามารถส่งต่อคำขอไปยัง PHP-FPM ของแต่ละโปรเจกต์ได้อย่างแม่นยำ
  • Clean Management
    แยกการจัดการ Web Server ออกจากตัวซอร์สโค้ดโปรเจกต์อย่างเด็ดขาด ทำให้สามารถรีสตาร์ท ปรับแต่ง หรืออัปเดต Nginx โดยไม่กระทบกับไฟล์ระบบข้างเคียงครับ

อ่านเพิ่มเติม