nginx-클라이언트 요청 본문이 임시 파일로 버퍼링 됨


48

큰 파일을 업로드하려고 할 때마다 로그 파일에 다음 오류가 발생합니다.

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

파일이 성공적으로 업로드되었지만 항상 위의 오류가 발생합니다.

나는이 증가 client_body_buffer_size하는 1000m내가 될 업로드 최대 파일을 기대이다. 그러나 이것은 단지 추측 일 뿐이며 더 이상 오류가 발생하지 않지만 이것이 client_body_buffer_size?

누군가 가이 지시문과 사용법을 밝힐 수 있다면 고맙겠습니다.


2
성공적으로 업로드되지 않았습니다.
Ben

답변:


51

이것은 오류가 아니라 경고입니다. 그것이 [warn]로그 에 머리말이 붙은 이유 입니다.

업로드 된 파일의 크기가 업로드 용으로 예약 된 메모리 내 버퍼보다 ​​큼을 의미합니다.

지시문 client_body_buffer_size은 해당 버퍼의 크기를 제어합니다.

가끔 파일 업로드 용으로 항상 1GB의 RAM을 예약 할 수 있다면 괜찮습니다. 디스크에있는 임시 파일이 아닌 RAM에 업로드를 버퍼링하는 것이 성능 최적화입니다. 큰 업로드의 경우 몇 초가 더 걸리더라도 중요하지 않습니다. 대부분의 업로드가 작다면 아마 낭비 일 것입니다.

결국, 당신은 정말로 적절한 크기가 무엇인지에 대한 결정을 내릴 수 있습니다.


5
귀하의 답변이 결정을 내리는 데 도움이되었습니다. 값을 약 512k에서 1m로 낮추겠습니다. 이 경고를 많이 받게되는 것은 부끄러운 일입니다.
Abs

가상 메모리로 인해 큰 값을 사용한다고해서 "가끔 파일 업로드를 위해 항상 1GB의 RAM이 예약"되지는 않습니다. (그것보다 더 많은 RAM 실제로 사용되는 현재 업로드 할 필요가 없습니다입니다.)
키릴 Bulygin

1
이 크기를 50MB로 설정하고 동시에 200 명에게 페이지를 보는 경우 10GB의 메모리를 차지합니까, 아니면 파일 업로드를 수행하는 모든 사용자에게만 50MB가 할당됩니까?
Codemonkey

@Codemonkey이 버퍼는 요청 본문이 업로드되는 동안에 만 사용됩니다. 업로드가 완료되면 메모리를 다른 요청에 사용할 수 있습니다. 다른 의견자가 지적했듯이 업로드가 진행되지 않는 동안에는 메모리가 사용되지 않습니다. 따라서 특정 순간에 동시에 업로드 한 횟수에 따라 다릅니다.
Michael Hampton

종종 10 개, 아마도 20 개를 넘지 않아야합니다. 128GB 상자이므로 메모리가 충분합니다 ..! 솔직히, 나는 내 오류 로그에서 그 [경고] 줄을 제거하기 위해 그것을하고있을 것입니다. 아마도 그것들을 무시해야합니다!
Codemonkey

17

NginX가 본문 내용을 임시 파일에 저장하지 않으려면 구성을 설정할 수 있습니다. 이처럼 :

    client_body_buffer_size     10M;
    client_max_body_size        10M;

이 구성을 모두 동일한 최대 값으로 설정 한 경우 size (각각 kB, MB 또는 GB의 경우 k, M 또는 G)로 NginX가 임시를 생성하지 않도록합니다. 파일.

자세한 정보 : http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_sizehttp://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


8
그러나이 구성을 사용하면 10 MiB보다 큰 모든 업로드도 막을 수 있습니다.
Josef

@Josef : 없음 방지 수단으로. 요청을 디스크에 버퍼링하면 경고 메시지가 나타납니다. 허용 된 답변을 확인하십시오.
OmarOthman

9
client_max_body_size매개 변수 때문에 @OmarOthman, Josef가 옳습니다 . 이 링크에 대한 정보를 참조하십시오 : client_max_body_size doc. : Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.
eddy85br
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.