반응형
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 |