Nginx를 활용한 컨테이너 Reverse Proxy
Docker 환경에서 Nginx를 이용한 Reverse Proxy 설정 및 로드밸런싱 구현 실습.
Nginx를 활용한 컨테이너 Reverse Proxy
Nginx를 활용한 컨테이너 Reverse Proxy
Nginx Reverse Proxy
- 클라이언트 요청이 특정 포트로 들어오면 준비해둔 애플리케이션 서버의 주소로 트래픽을 분배합니다.
- 기본 분배 방식은 Round-Robin이며, 요청 수가 적은 서버에 분배하는 least-connection, 클라이언트 IP 기준 분배하는 ip_hash 등의 알고리즘도 지원합니다.
Nginx를 Reverse Proxy로 설정하면 서버의 부하를 줄이고 응답 속도를 향상시킬 수 있습니다. 다양한 로드밸런싱 알고리즘을 활용해 대규모 애플리케이션에서의 안정성을 강화할 수 있습니다.
실습 환경
- NCP VM (Ubuntu 22.04 / vCPU2, RAM 4GB)
- Docker Engine 사전 설치 완료
컨테이너 기반 환경에서 Nginx를 Reverse Proxy로 구성하는 실습을 진행합니다.
Nginx Container Reverse Proxy
1. Nginx Node 컨테이너 생성 (5001, 5002, 5003)
1
2
3
4
docker run -it -d -e SERVER_PORT=5001 -p 5001:5001 -h alb-node01 -u root --name=alb-node01 dbgurum/nginxlb:1.0
docker run -it -d -e SERVER_PORT=5002 -p 5002:5002 -h alb-node02 -u root --name=alb-node02 dbgurum/nginxlb:1.0
docker run -it -d -e SERVER_PORT=5003 -p 5003:5003 -h alb-node03 -u root --name=alb-node03 dbgurum/nginxlb:1.0
docker ps -a | grep node
2. Proxy 역할의 Nginx 컨테이너 생성
1
docker run -d -p 8001:80 --name=proxy-container nginx:1.25.0-alpine
3. nginx.conf 생성 및 적용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# nginx.conf
events {
worker_connections 1024;
}
http {
upstream backend-alb {
server 223.130.156.230:5001;
server 223.130.156.230:5002;
server 223.130.156.230:5003;
}
server {
listen 80 default_server;
location / {
proxy_pass http://backend-alb;
}
}
}
1
2
docker cp nginx.conf proxy-container:/etc/nginx/nginx.conf
docker restart proxy-container
4. curl로 컨테이너 응답 테스트
1
2
3
curl localhost:5001
curl localhost:5002
curl localhost:5003
출력 예시:
1
Listening: 5001, Hosting: alb-node01
5. 브라우저로 Proxy 컨테이너 접속 테스트
브라우저에서 http://<공인IP>:8001 접속
→ 요청이 각 컨테이너로 Round-Robin 방식으로 분산되어 응답이 달라짐
6. 부하 분산 가중치 설정 (Weight)
1
2
3
4
5
upstream backend-alb {
server 223.130.156.230:5001 weight=3;
server 223.130.156.230:5002;
server 223.130.156.230:5003;
}
특정 서버에 더 많은 트래픽을 집중하거나, 테스트 시 부하 차등 분산이 가능해집니다.
This post is licensed under CC BY 4.0 by the author.


