Nginx : 요청 본문 버퍼링을 완전히 비활성화하는 방법


17

우분투 상자에 Madsonic 을 설치하려고하고 Nginx가 그 앞에서 실행되도록했습니다. 문제는 웹 인터페이스를 통해 물건을 업로드하려고 할 때이 경고가 계속 발생한다는 것입니다.

31115#0: *14 a client request body is buffered to a temporary file

업로드 창에서 진행률 표시 줄이 작동하지 않는 이유도 설명합니다. 관련 Nginx 구성은 다음과 같습니다.

    # proxy the madsonic server here
    location / {
            proxy_pass                      https://madsonic-server/;
            proxy_redirect                  off;
            proxy_buffering                 off;
            proxy_request_buffering         off;
            allow                           all;
            proxy_http_version              1.1;

            proxy_set_header                Host $http_host;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Host $server_name;
            proxy_set_header                X-Forwarded-Proto $scheme;

            client_body_buffer_size         0;
            client_max_body_size            0;
            proxy_max_temp_file_size        0;
            proxy_read_timeout              18000;
            proxy_send_timeout              18000;

            gzip                            off;
    }

현재 Nginx 1.9.12를 사용하고 있습니다.

내가 달성하고자하는 것은 Nginx가 요청 본문 버퍼를 전혀 사용하지 않고 크기에 관계없이 요청 본문을 Madsonic에 직접 전달하는 것입니다. 이것도 가능합니까? 그렇다면 올바른 구성은 무엇입니까?

다른 질문은 버퍼 크기를 설정하는 방법으로 대답하는 것 같습니다. 버퍼를 원하지 않습니다. 요청 본문을 Madsonic에 직접 전달하고 싶습니다.


끌 수 없습니다. 버퍼 크기 만 설정할 수 있습니다.
Michael Hampton

@MichaelHampton하지만 설명은 어떻습니까?
rad

아 맞아. 그리고 당신은 당신 자신의 질문에 대답했습니다.
Michael Hampton

@MichaelHampton 잘, 그래, 어떤 이유로 여전히 꺼져 있지 않은 경우를 제외하고 :(
rad

이것으로 운이 있습니까? proxy_request_buffering의 문서 설정에 따라 동일한 문제가 발생하지만 트릭을 수행하지만 여전히 업로드를 버퍼링합니다.
alejandrodnm

답변:


17

Docker 레지스트리에 Nginx 프록시를 설정하는 것과 동일한 문제가있었습니다. 나는 일을 끝내었다.

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_size오류를 방지하기 위해 여전히 0이어야했지만 watch -n 1 du -hs .분명히 차이를 보여주었습니다. 버퍼링은 요청 후에 데이터를 표시하고 요청 중에는 버퍼링을 표시하지 않았습니다.

proxy_http_version 1.1청크 인코딩으로 인해 필요합니다. Nginx 문서에서 인용 :

HTTP / 1.1 청크 전송 인코딩을 사용하여 원래 요청 본문을 보내는 경우 HTTP / 1.1을 프록시에 사용할 수없는 경우 지시문 값에 관계없이 요청 본문이 버퍼링됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.