리버스 프록시(Reverse Proxy) 아키텍처
실제 상용 서비스에서는 사용자가 서버 8080포트 등으로 직접 접속하지 못하게 막고, 앞단에 Nginx라는 문지기(Reverse Proxy)를 세워 80/443 포트로 트래픽을 몰아받은 뒤 뒷단의 여러 백엔드 서버로 분산(로드밸런싱)시켜줍니다.
이 심화 구성을 Docker Compose 하나로 완벽하게 구현할 수 있습니다.
version: '3.8'
services:
nginx-proxy:
image: nginx:latest
ports:
- "80:80"
volumes:
# 호스트의 설정 파일을 Nginx 컨테이너 설정 폴더로 덮어쓰기 마운트!
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web-app
web-app:
image: my-node-app:1.0
# 외부(포트매핑)로 노출하지 않음! Nginx 컨테이너를 통해서만 접근 가능
expose:
- "3000"
nginx.conf (호스트에 작성하는 설정 파일)
server {
listen 80;
server_name localhost;
location / {
# 사용자가 Nginx(80)에 접속하면, 도커 내부망을 통해 web-app 서비스의 3000 포트로 트래픽을 던져줌(Proxy Pass)
proxy_pass http://web-app:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}