Least Connections(최소 연결)
현재 활성 연결(active connections) 수가 가장 적은 서버(대기하는 요청 수가 적은 서버)로 우선적으로 요청을 보내는 방식입니다.
특정 서버에서 요청에 대한 처리 시간이 길어져 연결 수가 줄지 않을 경우(요청 많이 지연될 경우) 요청을 보내지 않아 좋습니다.
Least Connections(최소 연결) 설정
1. C:\workspaces\docker\nginx\conf\upstream.conf 파일을 수정합니다.
Least Connections를 위해 upstream 블록을 추가합니다.
:
# Least Connections
upstream backend_servers_leastconn {
least_conn;
server dev-transmission:8080;
server dev-transmission-second:8080;
}
저는 도커 컨테이너로 실행하기 때문에 IP 대신 컨테이너 이름으로 설정하였습니다.
upstream 블록 안에 least_conn 지시어를 추가만 하면 자동으로 활성 연결 수가 적은 서버로 요청을 보냅니다.
least_conn;
더 자세한 least_conn 설명은 Nginx Docs(https://nginx.org/en/docs/http/ngx_http_upstream_module.html#least_conn)를 참고하시기 바랍니다.
2. C:\workspaces\docker\nginx\default.conf 파일을 수정합니다.
Least Connections으로 요청이 전달되게 backend_servers_weight를 backend_servers_leastconn로 변경합니다.
server {
:
# /로 들어온 요청 (모든 요청)
location / {
# 요청을 전달
proxy_pass http://backend_servers_leastconn;
:
}
}
3. 변경된 설정을 적용하기 위해서 Nginx를 Reload 합니다.
# 문법 검사
docker compose exec nginx nginx -t
# Nginx Reload
docker compose exec nginx nginx -s reload
4. http://127.0.0.1으로 접속한 후 여러 번 호출합니다.
Nginx의 log를 보면 요청이 없는 쪽으로 요청을 보내어 처리된 것을 확인할 수 있습니다.
172.20.0.4:8080 0.014 172.20.0.1 - - [16/Oct/2026:14:27:01 +0000] "GET / HTTP/1.1" 200 893 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.
0.0 Safari/537.36" "-"
172.20.0.3:8080 0.012 172.20.0.1 - - [16/Oct/2026:14:27:01 +0000] "GET / HTTP/1.1" 200 893 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.
0.0 Safari/537.36" "-"
172.20.0.4:8080 0.004 172.20.0.1 - - [16/Oct/2026:14:27:01 +0000] "GET / HTTP/1.1" 200 893 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.
0.0 Safari/537.36" "-"
172.20.0.4:8080 0.003 172.20.0.1 - - [16/Oct/2026:14:27:02 +0000] "GET / HTTP/1.1" 200 893 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.
0.0 Safari/537.36" "-"
172.20.0.3:8080 0.004 172.20.0.1 - - [16/Oct/2026:14:27:02 +0000] "GET / HTTP/1.1" 200 893 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.
0.0 Safari/537.36" "-"
현재 활성 연결(Active Connections) 수 확인 방법
1. C:\workspaces\docker\nginx\default.conf 파일을 수정합니다.
실시간으로 활성 연결 수를 확인하기 위해 location 블록을 추가합니다.
server {
:
# 활성 연결(Active Connections) 수 확인
location /activeconn {
stub_status;
access_log off;
allow 127.0.0.1;
}
:
}
- stub_status : stub_status 모듈을 활성화시킨다. (Nginx의 실시간 활성 연결 수와 읽기/처리/대기 수를 텍스트 형태로 출력해 줍니다.)
- allow : 접근을 허용할 IP를 설정합니다.
2. 변경된 설정을 적용하기 위해서 Nginx를 Reload 합니다.
# 문법 검사
docker compose exec nginx nginx -t
# Nginx Reload
docker compose exec nginx nginx -s reload
3. http://127.0.0.1/activeconn으로 접속합니다.

실시간 활성 연결 수
Active connections: 1
- Active connections : 실시간으로 클라이언트와 유지하고 있는 총 연결 수입니다. (Waiting 상태까지 모두 포함한 수입니다.)
Nginx가 실행된 이후 누적 수 (총합)
server accepts handled requests
19 19 81
- accepts: 클라이언트로부터 수락한 총 연결 수입니다.
- handled: 성공적으로 처리한 총 연결 수입니다. (거절된 연결이 없다면 accepts와 동일합니다.)
- requests: 처리한 총 HTTP 요청 수입니다. (여러 개의 파일을 요청하기 때문에 handled보다 큽니다.)
요청 처리에 대한 실시간 Nginx의 읽기/처리/대기 수
Reading: 0 Writing: 1 Waiting: 0
- Reading: HTTP 요청을 읽고 있는 중인 연결 수입니다. (대부분 0이거나 낮게 나옵니다.)
- Writing: 응답 데이터를 보내고 있는 연결 수입니다. (백엔드 서버에서 처리하고 있는 수입니다. 서버에 부하가 발생하면 수가 올라갑니다.)
- Waiting: 클라이언트와 연결은 유지되고 있는 수입니다.
이처럼 전체의 활성 연결 수와 읽기/처리/대기 수를 볼 수 있지만 백엔드 서버별로는 알 수 없습니다.
Nginx의 상용 버전 Nginx Plus에는 백엔드 서버별로는 확인할 수 있다고 합니다.
더 자세한 stub_statuss 설명은 Nginx Docs(https://nginx.org/en/docs/http/ngx_http_stub_status_module.html)를 참고하시기 바랍니다.