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

우분투 상자에 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에 직접 전달하고 싶습니다.



답변

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을 프록시에 사용할 수없는 경우 지시문 값에 관계없이 요청 본문이 버퍼링됩니다.


답변