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