반응형

Nginx에서 백엔드 서버에 부하 분산(load balancing)을 설정하려면 upstream 모듈을 사용하여 여러 백엔드 서버를 정의하고, proxy_pass를 통해 요청을 분배하도록 설정할 수 있습니다. 기본적인 설정 예시는 아래와 같습니다:

1. upstream 블록 정의

upstream 블록을 사용하여 백엔드 서버들을 정의합니다. 여러 서버를 등록할 수 있으며, Nginx가 요청을 분배합니다.

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    # 로드 밸런싱 알고리즘을 변경할 수 있습니다 (예: round-robin, least_conn, ip_hash 등)
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
        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;
    }
}

2. 로드 밸런싱 알고리즘

Nginx는 기본적으로 round-robin 방식으로 부하 분산을 처리합니다. 그러나 다른 알고리즘을 사용하려면 upstream 블록 내에 추가적인 옵션을 설정할 수 있습니다.

  • least_conn: 연결 수가 가장 적은 서버로 요청을 분배
  • ip_hash: 클라이언트 IP 주소에 따라 서버를 지정하여 동일한 클라이언트가 항상 같은 서버로 연결되도록 함

예시:

upstream backend {
    least_conn;  # 연결 수가 적은 서버로 분배
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

--------------------------------------

upstream backend {
    ip_hash;  # 클라이언트 IP를 기반으로 동일 서버로 요청을 보냄
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}
 

3. 헬스 체크 및 서버 다운 시 처리

서버가 다운되었을 때 다른 서버로 요청을 전달하도록 설정하려면 down 옵션을 사용할 수 있습니다. 또한, 서버의 상태를 체크하여 문제가 발생한 서버를 자동으로 제외하는 설정도 가능합니다.

upstream backend {
    server backend1.example.com check;
    server backend2.example.com check;
    server backend3.example.com;
}

이렇게 설정하면 Nginx가 주기적으로 서버 상태를 점검하고 문제가 있을 경우 자동으로 제외합니다.

4. 기타 설정

추가로 필요한 설정들을 location 블록에 추가할 수 있습니다. 예를 들어, proxy_set_header를 사용하여 클라이언트의 실제 IP를

백엔드 서버에 전달하는 등의 설정을 할 수 있습니다.

 
location / {
    proxy_pass http://backend;
    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;
    proxy_set_header Connection '';
    proxy_http_version 1.1;
    proxy_cache_bypass $http_upgrade;
}

이 설정은 백엔드 서버로 요청을 전달할 때 추가적인 헤더 정보를 제공하여 클라이언트의 IP와 요청 정보를 정확히 전달하도록 돕습니다.

5. 설정 적용 후 테스트

설정을 완료한 후에는 Nginx를 재시작하거나 리로드하여 변경 사항을 적용합니다:

 
sudo systemctl restart nginx  # 또는
sudo nginx -s reload

이렇게 하면 Nginx에서 백엔드 서버에 대한 부하 분산을 설정할 수 있습니다.

 

6. 활용 예시

vi /etc/nginx/sites-enabled/default

-------------------------------------------

upstream tomcat_backend {
    server backend_server_IP1:8080;
    server backend_server_IP1:8080;
    server backend_server_IP1:8080;
} 
server { 
    listen 80 default_server;
    listen [::]:80 default_server; 
    root /var/www/html; index index.html index.htm index.nginx-debian.html;
    servername ; 
    location / { 
	    try_files $uri $uri/ =404; 
    } 
    location /api { 
        #해당 부분 추가 
        rewrite ^/api(/.*)$ $1 break; 
        proxy_pass http://tomcat_backend/; # 업스트림 그룹으로 프록시 
        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; 
    } 
}

 

반응형

'개발 부트캠프 > 네트워크' 카테고리의 다른 글

[HTTP] Stateful vs Stateless  (1) 2024.12.04
[IP] 고정 IP  (0) 2024.12.03
[프로토콜] TCP(Transmission Control Protocol)  (0) 2024.12.03
[IP] 바인드 주소(Bind Addresss)  (0) 2024.11.27

+ Recent posts