ทำ Reverse Proxy ด้วย Nginx และ Docker Compose

อ่านประมาณ 1 นาที

Reverse proxy ช่วยให้ผู้ใช้เข้าเว็บผ่านจุดเดียว และแอปหลายตัวแชร์พอร์ต 80/443 ร่วมกันได้ ตัวอย่างนี้ใช้ Nginx หน้าแอปตัวอย่างตัวเดียว

โครงสร้างไฟล์

mkdir -p ~/lab/proxy && cd ~/lab/proxy
touch docker-compose.yml nginx.conf

docker-compose.yml

services:
  proxy:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - app
    restart: unless-stopped

  app:
    image: traefik/whoami
    restart: unless-stopped

nginx.conf

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://app:80;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

ชื่อ app ใน proxy_pass คือชื่อบริการในไฟล์ compose Docker มี DNS ภายในให้ จึงเรียกกันด้วยชื่อได้โดยไม่ต้องรู้ IP

รันและทดสอบ

docker compose up -d
curl -i http://localhost/
docker compose logs -f proxy

ก่อนรีโหลดค่า Nginx ทุกครั้ง ให้ตรวจไวยากรณ์ด้วย docker compose exec proxy nginx -t จะได้ไม่ทำให้เว็บล่มเพราะพิมพ์ผิดเครื่องหมาย

Leave a Reply

Your email address will not be published. Required fields are marked *