본문 바로가기
Docker

도커 Nginx 로드 밸런싱 설정

by holy season 2025. 1. 17.
반응형

들어가며 

오늘날 웹 애플리케이션은 확장성과 가용성이 핵심입니다.

특히 다중 서버 환경에서 트래픽을 효율적으로 분산하기 위해 로드 밸런싱이 필수입니다.

Nginx는 강력한 로드 밸런싱 기능을 제공하며, 이를 도커 컨테이너 환경에서 손쉽게 설정할 수 있습니다.

Nginx를 도커 컨테이너로 실행하고, 로드 밸런싱 설정을 통해 트래픽을 여러 백엔드 서버로 분산하는 방법을 단계별로 살펴보겠습니다.

 

1. Nginx 로드 밸런싱이란?

Nginx는 클라이언트 요청을 다중 백엔드 서버로 분산하여 트래픽을 효율적으로 처리합니다.

이를 통해 다음과 같은 이점을 얻을 수 있습니다:

  • 고가용성: 하나의 서버가 다운되더라도 서비스 지속 가능.
  • 확장성: 다중 서버를 통해 트래픽 분산.
  • 유연성: 다양한 로드 밸런싱 방식 지원 (라운드 로빈, 최소 연결, IP 해시 등).

2. Docker Compose 설정

웹 서버용 Nginx프론트엔드용 Nginx를 설정하는 방법입니다.

docker-compose.yml 파일을 작성하여 두 개의 서비스를 실행하고, 각 서비스가 서로 독립적으로 작동하도록 구성합니다.

version: '3'
services:
  WS:
    image: nginx
    ports:
      - "20080:80"
    restart: always
    environment:
      TZ : "Asia/Seoul"
    networks:
      network:
    volumes:
      - nginx:/etc/nginx

  front:
    image: nginx
    restart: always
    environment:
      TZ : "Asia/Seoul"
    networks:
      network:
    volumes:
      - front_dist:/usr/share/nginx/html
      - front_nginx:/etc/nginx
      
 volumes:
  nginx:
  front_nginx:
  front_dist:

networks:
  network:

3. Docker  Compose실행

여기에서는 docker-compose 명령어를 사용하여 컨테이너를 실행하고, 스케일 옵션을 통해 동일한 서비스를 여러 개 실행하는 방법입니다.

docker-compose up -d --scale front=3
  • -d: 컨테이너를 백그라운드 모드로 실행합니다.
  • --scale front=3: front라는 서비스의 컨테이너를 3개 생성합니다.

4. Nginx 설정 파일 작성

Nginx를 사용하여 front 서비스의 로드 밸런싱을 설정합니다.

아래는 Nginx 설정 파일의 예제로, upstream 블록을 사용하여 요청을 분산 처리하도록 구성하였습니다.

upstream front {
    least_conn; # 최소 연결 방식으로 로드 밸런싱
    server nginx_front_1; # 첫 번째 프론트엔드 컨테이너
    server nginx_front_2; # 두 번째 프론트엔드 컨테이너
    server nginx_front_3; # 세 번째 프론트엔드 컨테이너
}

server {
    listen 80;
    listen [::]:80;
    server_name localhost;

    root /usr/share/nginx/html; # 기본 정적 파일 경로

    location / {
        proxy_set_header Host $host; # 클라이언트의 Host 헤더를 전달
        proxy_set_header Connection ""; # 연결 헤더 초기화
        proxy_pass http://front; # upstream 블록(front)으로 요청 전달
    }
}

설정 상세 설명

  1. upstream 블록
    • least_conn: 현재 연결이 가장 적은 서버로 요청을 분배하는 로드 밸런싱 전략.
    • 서버 목록: Docker Compose에서 생성된 컨테이너 이름(예: nginx_front_1, nginx_front_2, nginx_front_3)을 지정.
  2. server 블록
    • listen: Nginx가 80번 포트에서 요청을 수신하도록 설정.
    • server_name: 로컬호스트를 서버 이름으로 지정.
    • root: 정적 파일이 배치될 경로(/usr/share/nginx/html)를 지정.
  3. location / 블록
    • proxy_set_header:
      • Host: 클라이언트 요청의 Host 헤더를 백엔드로 전달.
      • Connection: 연결 헤더를 초기화하여 백엔드 연결 오류 방지.
    • proxy_pass: 클라이언트 요청을 upstream front 블록으로 전달.

마무리

이번 글에서는 Docker Compose와 Nginx를 활용하여 로드 밸런싱 환경을 구성하는 방법을 살펴보았습니다.

이를 통해 여러 개의 컨테이너에 트래픽을 효율적으로 분산하고, 서비스의 확장성가용성을 극대화할 수 있었습니다.

반응형

'Docker' 카테고리의 다른 글

Nginx와 Tomcat 연동하기  (0) 2024.11.05
Jupyter Notebook 컨테이너 생성  (0) 2024.04.29
Dockerfile 스프링부트 실행 이미지 만들기  (0) 2024.04.09
Mysql 컨테이너 생성  (0) 2023.12.28
루트 디렉토리 경로 수정  (0) 2023.10.04