질문: too big header

3516 단어 Nginx
질문: too big header
  • 문제
  • 조사 문제
  • 문 제 를 어떻게 해결 합 니까
  • 보충 지식
  • 문제.
    인터페이스 오류 발생 Nginx 502 Bad Gateway
    문 제 를 조사 하 다.
    Nginx 가 잘못 보 고 했 으 니 Nginx 서버 오류 로 그 를 살 펴 보 겠 습 니 다.
    [error] 12917#0: *62380774 upstream sent too big header while reading response header from upstream.
    

    즉, 인터페이스 요청 이 보 낸 header 헤드 가 너무 커서 Nginx 에 요청 한 요청 헤드 밴드 의 정보 가 너무 많아 Nginx 설정 크기 를 초과 했다 고 생각 할 수 있 습 니 다.
    프론트 엔 드 에서 사용 하 는 쿠키 가 너무 클 가능성 이 높 습 니 다.
    문 제 를 어떻게 해결 합 니까?
  • 프론트 엔 드 는 가능 한 소량의 쿠키 로 데 이 터 를 저장 합 니 다.
  • 배경 Nginx 의 header 크기 설정 을 크게 변경 합 니 다.

  • 방법 1 은 더 이상 말 하지 않 겠 습 니 다. 전단 에서 코드 를 고 쳐 야 하고 업무 논 리 를 고 쳐 야 할 수도 있 습 니 다.
    Nginx 설정 을 어떻게 수정 하 는 지 직접 말 해 보 세 요. 간단 하고 빠 릅 니 다.
  • Nginx 서버 Nginx 설치 디 렉 터 리 에 들 어 갑 니 다.
  • Nginx 프로필 nginx. conf 를 수정 합 니 다.
  • vim nginx.conf
    

    http 모듈 에서 증가:
    proxy_buffer_size 128k;
    proxy_buffers 32 32k;
    proxy_busy_buffers_size 128k;
    

    지식 을 보충 하 다
    Nginx 의 기본 헤더 길이 상한 선 은 4k 입 니 다. 이 값 을 초과 하면 잘못 보 고 됩 니 다.
    헤더 정보 요청 이 초과 되면 Nginx 는 400 오 류 를 되 돌려 줍 니 다.
    다음 두 개의 매개 변 수 를 통 해 Nginx 의 header 상한 선 을 조정 할 수 있 습 니 다.
    client_header_buffer_size 16k;
    large_client_header_buffers 4 16k;
    

    다음은 이 두 개의 매개 변수 와 그들 간 의 관련 관 계 를 설명 한다.
    nginx 에서 header 를 처리 하 는 방법:
  • 요청 을 먼저 처리 한 request_line, 그 다음 request_header.
  • 이 두 사람의 buffer 분배 전략 은 같다.
  • 먼저 client_header_buffer_size 설 정 된 값 에 따라 하나 buffer 를 분배 하고, 분 배 된 buffer 이 수용 되 지 않 으 면 request_line / request_header 설 정 된 매개 변수 에 따라 다시 분배 large_client_header_buffers 하고, large_buffer 여전히 수용 되 지 않 으 면 414 (처리 large_buffer / 400 (처리 request_line 오 류 를 되 돌려 줍 니 다.
  • 만약 당신 의 요청 중 request_header 이 매우 크다 면 header 을 사용 해 야 메모리 분 배 를 한 번 줄 일 수 있 습 니 다.
  • 요청 중 소량의 요청 헤더 만 크다 면 large 를 사용 해 야 합 니 다.client_header_buffers, 이 는 큰 header 를 처리 할 때 만 더 많은 공간 을 분배 하여 불필요 한 메모리 공간 낭 비 를 줄 일 수 있 기 때 문 입 니 다.

  • get 요청 에 대해 요청 문자열 이 너무 긴 문 제 를 해결 합 니 다:
    get 요청 에 대하 여 우 리 는 다른 두 설정 을 수정 하여 요청 문자열 의 긴 문 제 를 해결 할 수 있 습 니 다.client_header_buffer_size 문법:
    client_header_buffer_size size
    

    기본 값: 1k 사용 필드: http, server 라 는 명령 은 클 라 이언 트 가 요청 한 http 헤드 버퍼 크기 를 지정 합 니 다. 대부분의 경우 다음 헤드 요청 의 크기 는 1k 보다 크 지 않 지만 wap 클 라 이언 트 에서 온 큰 쿠키 가 있 으 면 1k 보다 클 수 있 습 니 다. Nginx 는 더 큰 버퍼 에 할당 합 니 다. 이 값 은 client_header_buffer_size 에서 설정 할 수 있 습 니 다.large_client_header_buffers 문법:
    large_client_header_buffers number size
    

    기본 값: large_client_header_buffers 4 4k / 8k 사용 필드: http, server 명령 은 클 라 이언 트 가 요청 한 비교적 큰 헤더 파일 을 버퍼 의 최대 값 으로 지정 합 니 다. 요청 한 URI 크기 가 이 값 을 초과 하면 서버 는 'Request URI too large' (414) 를 되 돌려 줍 니 다. 마찬가지 로 요청 한 머리 필드 가 이 값 보다 크 면 서버 는 'Bad request' (400) 를 되 돌려 줍 니 다.버퍼 는 수요 에 따라 분 리 됩 니 다.기본 버퍼 크기 는 운영 체제 의 페이지 파일 크기 입 니 다. 보통 4k 또는 8k 입 니 다. 연결 요청 이 상 태 를 large_client_header_buffers 로 바 꾸 면 이 버퍼 는 풀 립 니 다.
    그렇다면 왜 keep-alive 의 크기 를 수정 하면 http header 요청 문자열 이 너무 긴 문 제 를 해결 할 수 있 는 지 이상 하 게 생각 하 는 사람 이 있 을 것 이다. 이 는 GET 협의의 HTTP 요청 부터 시작 해 야 한다. 사실 GET 제출 하면 요청 한 데 이 터 는 GET 다음 URL 에 첨부 된다.

    좋은 웹페이지 즐겨찾기