서버 그룹 정의 및 사용 예시
ngx_http_upstream_module 모듈은 proxy_pass, fastcgi_pass, memcached_pass 지시문에서 참조할 수 있는 서버 집합을 정의하는 데 사용됩니다.
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
동적 서버 그룹 구성은 상용 버전에서만 지원됩니다.
동적 구성 예제
upstream appservers {
zone appservers 64k;
server appserv1.example.com weight=5;
server appserv2.example.com:8080 fail_timeout=5s slow_start=30s;
server 192.0.2.1 max_fails=3;
server reserve1.example.com:8080 backup;
server reserve2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://appservers;
health_check;
}
location /upstream_conf {
upstream_conf;
allow 127.0.0.1;
deny all;
}
}
핵심 지시어 설명
upstream
语法: upstream name { ... }
기본값: 없음
컨텍스트: http
예시:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
기본적으로 요청은 서버들의 가중치에 따라 순환 방식으로 분배됩니다. 위 예시에서는 총 7개의 요청 중 5개는 backend1.example.com로, 나머지 각각 1개씩 두 번째와 세 번째 서버로 전달됩니다. 만약 특정 서버에서 요청 실패가 발생하면 다음 서버로 자동 전달되며, 모든 서버를 한 번씩 시도한 후에도 실패하면 마지막 시도 결과를 클라이언트에게 반환합니다.
server
구문: server address [parameters];
기본값: 없음
컨텍스트: upstream
서버 주소와 추가 옵션을 지정합니다. 주소 형식은 도메인 이름, IP 주소(포트 포함 가능), 또는 unix: 접두사가 붙은 유닉스 소켓이 될 수 있습니다. 포트 미지정 시 기본값은 80입니다. 하나의 도메인이 여러 IP로 해석되는 경우, 해당 도메인은 다수의 서버로 간주됩니다.
가능한 파라미터 목록
- weight=number
서버의 우선순위를 설정합니다. 기본값은 1이며, 값이 클수록 더 많은 요청을 처리합니다. - max_fails=number
최대 실패 횟수를 정의합니다. 기본값은 1입니다. 0으로 설정하면 실패 카운트 기능이 비활성화됩니다. 이 값은proxy_next_upstream,fastcgi_next_upstream,memcached_next_upstream등에서도 영향을 받습니다. - fail_timeout=time
다음과 같은 조건에서 서버를 일시적으로 비활성 상태로 표시합니다: - 최대 실패 횟수 초과 시 - 요청 타임아웃 발생 시 기본값은 10초입니다. - slow_start=time
서버가 불량 상태에서 회복되거나 재가용 상태로 전환될 때, 가중치를 0에서 원래 값까지 점차 복원하는 데 걸리는 시간을 설정합니다. 기본값은 1초이며, 이는 비활성 상태로 간주됩니다. (상용 버전 전용) - backup
해당 서버를 보조 서버로 지정합니다. 메인 서버들이 모두 사용 불가능할 경우에만 요청이 전달됩니다. - down
서버를 영구적으로 비활성 상태로 표시합니다. 주로ip_hash지시어와 함께 사용됩니다.
예시:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
}
zone
구문: zone name size;
기본값: 없음
컨텍스트: upstream
업스트림 그룹의 공유 메모리 영역을 정의합니다. 이 설정은 동적 구성 및 실시간 모니터링 기능을 활성화하는 데 필수적이며, 크기는 바이트 단위로 지정합니다. 예: zone appservers 64k; 는 64KB의 메모리 영역을 할당합니다.