透過 nginx 反向代理將大檔案(>2GB)上傳到容器時發生錯誤

透過 nginx 反向代理將大檔案(>2GB)上傳到容器時發生錯誤

我正在 docker 容器中運行應用程式(https://github.com/filebrowser/filebrowser/)我正在嘗試上傳非常大(> 2)GB的檔案。容器在本地主機上的非標準連接埠上公開應用程序,我透過反向代理連接到該連接埠(這樣我就可以在一台電腦上運行多個應用程式)。問題是當我上傳超過 2097152 位元組的檔案時,它會出錯。我可以看到文件已完全上傳到 nginx,並且部分已上傳到容器化應用程序,但隨後在 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_sizeproxy_buffersproxy_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

簡單回答:


所有其他選項僅適用於下載給客戶(回覆)。引用文件:

答案2

我也達到了 2GB 限制。proxy_request_buffering off;不適合我。將以下兩個選項添加到該/位置是唯一對我有用的事情:

proxy_buffering      off;
client_max_body_size 0;

相關內容