ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 더 효율적으로 튜닝할 수 있습니다!

    댓글

Designed by Tistory.