Post

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

공인 IP:8001로 접속 시 5001, 5002, 5003 포트를 사용하는 노드들에 로드밸런싱 적용


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.