nginx 역방향 프록시를 통해 대용량 파일(>2GB)을 컨테이너에 업로드하는 중 오류가 발생했습니다.

nginx 역방향 프록시를 통해 대용량 파일(>2GB)을 컨테이너에 업로드하는 중 오류가 발생했습니다.

도커 컨테이너에서 애플리케이션을 실행하고 있습니다(https://github.com/filebrowser/filebrowser/) 매우 큰(>2GB) 파일을 업로드하려고 합니다. 컨테이너는 역방향 프록시를 통해 연결하는 localhost의 비표준 포트에 앱을 노출합니다(따라서 하나의 컴퓨터에서 여러 앱을 실행할 수 있음). 문제는 2097152바이트가 넘는 파일을 업로드할 때 오류가 발생한다는 것입니다. 파일이 nginx에 완전히 업로드되었고 부분적으로 contianerized 앱에 생성되었지만 오류가 발생하기 전에 2097152바이트에서 오랫동안 정지되어 컨테이너화된 앱에서 예기치 않은 EOF 오류가 발생하는 것을 볼 수 있습니다. 컨테이너화된 앱에 파일을 직접 업로드하면 제대로 작동하기 때문에 nginx에 문제가 있는 것 같습니다. nginx 구성에 다양한 지시문을 추가하려고 시도했지만 당황했습니다. 사이트의 내 nginx 구성은 다음과 같습니다.

server {
    server_name example.com;
    client_max_body_size    30g;
    proxy_buffer_size       1024k;
    proxy_buffers 4 1024k;
    proxy_busy_buffers_size 1024k;
    proxy_max_temp_file_size 10000m;
    proxy_connect_timeout   10000;
    proxy_send_timeout      10000;
    proxy_read_timeout      10000;
    send_timeout            10000;
    client_header_timeout   10000;
    client_body_timeout     10000;
    
    location / {
    proxy_pass http://localhost:8088/;
    proxy_http_version 1.1;
    proxy_cache_bypass $http_upgrade;

    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    proxy_set_header Host              $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-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;

    proxy_connect_timeout              10000s;
    proxy_send_timeout                 10000s;
    proxy_read_timeout                 10000s;
    }}

nginx에서 발생하는 오류는 다음과 같습니다.

2022/04/14 20:26:56 [error] 3286524#3286524: *13184 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: example.com, request: "POST /api/resources/Fedora-KDE-Live-x86_64-35-1.2.iso?override=false HTTP/1.1", upstream: "http://[::1]:8088/api/resources/Fedora-KDE-Live-x86_64-35-1.2.iso?override=false", host: "example.com", referrer: "https://example.com/files/" 

편집: 많은 조사를 한 후에 해결책은 , 및 추가를 제거하는 것 같았습니다. proxy_buffer_size이것이 proxy_buffers작동 proxy_busy_buffer_size하는 proxy_request_buffering off;이유는 모르겠지만 작동합니다. 구성에서 수정된 줄은 다음과 같습니다.

    # proxy_buffer_size       1024k;
    # proxy_buffers 4 1024k;
    # proxy_busy_buffers_size 1024k;
    proxy_request_buffering off;

답변1

간단한 대답:


다른 모든 옵션은 다음에만 적용됩니다.다운로드클라이언트에게(응답). 문서에서 인용 :

  • proxy_buffer_size

    ... 첫 번째 부분을 읽는 데 사용되는 버퍼의 크기응답프록시 서버로부터 수신됨...

  • proxy_buffers

    ... 읽기에 사용되는 버퍼응답프록시 서버에서 ...

  • proxy_busy_buffers_size

    ... 버퍼링할 때응답프록시 서버에서 ...

답변2

2GB 제한에도 도달했습니다. proxy_request_buffering off;나에게 효과가 없었습니다. 아래 두 가지 옵션을 /위치에 추가하는 것이 나에게 도움이 된 유일한 방법입니다.

proxy_buffering      off;
client_max_body_size 0;

관련 정보