-
Nginx의 버퍼(Buffer)와 타임아웃(Timeout) 설정으로 성능 최적화웹서버/nginx 2025. 3. 16. 14:11
서버의 하드웨어보다는 요청의 특성에 따라 조정되어야 하며, 기본값을 그대로 사용하는 것도 권장됩니다.
1. 버퍼(Buffer) 설정
버퍼는 데이터를 디스크에 쓰기 전에 **메모리(RAM)**에 일시적으로 저장하는 영역입니다.
적절한 버퍼 크기 설정은 디스크 I/O를 줄이고 성능을 향상시킵니다.1. client_body_buffer_size
- 목적: 클라이언트의 POST 데이터(예: 폼 제출)를 메모리에 버퍼링합니다.
- 기본값: 8k 또는 16k (서버 설정에 따라 다름)
- 권장값: 10k (10KB)
client_body_buffer_size 10k; # 10KB로 설정
- 주의사항:
- 너무 작으면 디스크 사용 증가 → 성능 저하
- 너무 크면 메모리 낭비
2. client_header_buffer_size
- 목적: 클라이언트의 헤더 데이터를 메모리에 버퍼링합니다.
- 기본값: 1k
- 권장값: 1k (1KB)
client_header_buffer_size 1k;
3. client_max_body_size
- 목적: 허용할 최대 POST 데이터 크기를 제한합니다.
- 기본값: 1m (1MB)
- 권장값: 8m (8MB)
client_max_body_size 8m; # 8MB로 설정 (413 에러 방지)
- 초과 시: 413 Request Entity Too Large 오류 반환
2. 타임아웃(Timeout) 설정
타임아웃은 클라이언트와의 연결 지연을 방지하기 위해 최대 대기 시간을 설정합니다.
1. client_body_timeout & client_header_timeout
- 목적: 클라이언트가 데이터 전송을 완료할 때까지 대기 시간을 설정합니다.
- 기본값: 60s
- 권장값: 12ms (밀리초 단위)
client_body_timeout 12ms; client_header_timeout 12ms;
- 주의사항: 너무 길면 악의적인 클라이언트가 자원을 점유할 수 있음
2. keepalive_timeout
- 목적: 클라이언트와의 연결 유지 시간을 설정합니다.
- 기본값: 75s
- 권장값: 10s ~ 30s
keepalive_timeout 20s; # 20초로 설정
- 장점: 여러 요청을 단일 연결로 처리 → 효율성 증가
- 단점: 너무 길면 연결 풀 고갈 가능성
3. send_timeout
- 목적: 클라이언트가 응답을 받을 때까지의 대기 시간을 설정합니다.
- 기본값: 60s
- 권장값: 30s
send_timeout 30s;
- 초과 시: 연결 강제 종료
3. 고성능 전송 최적화
정적 파일 전송 성능을 극대화하기 위한 설정입니다.
1. sendfile
- 목적: 디스크의 파일을 직접 네트워크로 전송 (버퍼 사용 안 함)
- 기본값: off
- 권장값: on
sendfile on;
2. tcp_nopush
- 목적: 패킷 크기를 최적화하여 네트워크 효율성 증가
- 기본값: off
- 권장값: on (반드시 sendfile on과 함께 사용)
tcp_nopush on;
4. 결론 & 권장 설정 예시
http { # 버퍼 설정 client_body_buffer_size 10k; client_header_buffer_size 1k; client_max_body_size 8m; # 타임아웃 설정 client_body_timeout 12ms; client_header_timeout 12ms; keepalive_timeout 20s; send_timeout 30s; # 고성능 전송 sendfile on; tcp_nopush on; }
5. 주의사항
- 무조건적인 변경 금지: 기본값이 대부분의 경우 최적화되어 있습니다.
- 점진적 조정: 변경 후 성능 모니터링 필수 (예: nginx -t, 로그 분석)
- 특수 상황에 맞춤 설정: 대용량 파일 업로드, 실시간 스트리밍 등 특수 요구 시 조정
이 설정들을 이해하면 Nginx를 더 효율적으로 튜닝할 수 있습니다!
'웹서버 > nginx' 카테고리의 다른 글
gzip 압축으로 정적 리소스(CSS, JS 등)의 전송 효율을 높이는 방법 (2) 2025.03.16 Expires 설정으로 정적 리소스(이미지, CSS, JS 등) 캐싱 최적화 (0) 2025.03.16 Nginx 프로세스 구조 (0) 2025.03.16 map 지시자 (0) 2025.03.15 location 블록에 대해 더 알아야 할 주요 사항들 (0) 2025.02.25