Erro ao fazer upload de arquivos grandes (> 2 GB) por meio do proxy reverso nginx para o contêiner

Erro ao fazer upload de arquivos grandes (> 2 GB) por meio do proxy reverso nginx para o contêiner

Estou executando um aplicativo em um contêiner docker (https://github.com/filebrowser/filebrowser/) para o qual estou tentando fazer upload de arquivos muito grandes (>2) GB. O contêiner expõe o aplicativo em uma porta não padrão no host local, à qual eu me conecto por meio de um proxy reverso (para poder executar vários aplicativos em uma máquina). O problema é que quando eu carrego um arquivo com mais de 2.097.152 bytes, ocorre um erro. Posso ver que os arquivos foram totalmente carregados para o nginx e que ele chega parcialmente ao aplicativo conteinerizado, mas depois trava por um longo tempo em 2097152 bytes antes de ocorrer um erro, fazendo com que o aplicativo conteinerizado forneça um erro EOF inesperado. Suspeito que haja algo errado com o nginx porque quando faço upload de um arquivo diretamente para o aplicativo em contêiner, ele funciona bem. Tentei adicionar uma variedade de diretivas à configuração do nginx e estou perplexo. Minha configuração nginx para o site é:

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;
    }}

O erro que recebo no 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/" 

Editar: depois de pesquisar bastante, parece que a solução foi remover proxy_buffer_size, proxy_buffers, e proxy_busy_buffer_sizeadicionar proxy_request_buffering off;não sei por que isso funciona, mas funciona. As linhas modificadas na configuração foram:

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

Responder1

Resposta simples:


Todas as outras opções aplicam-se apenas aTransferênciasao cliente (respostas). Citando os documentos:

  • proxy_buffer_size

    ... tamanho do buffer usado para ler a primeira parte dorespostarecebido do servidor proxy...

  • proxy_buffers

    ... buffers usados ​​para ler umrespostado servidor proxy ...

  • proxy_busy_buffers_size

    ... Ao armazenar em buffer derespostasdo servidor proxy ...

Responder2

Também atingi o limite de 2 GB. proxy_request_buffering off;não funcionou para mim. Adicionar as duas opções abaixo ao /local foi a única coisa que funcionou para mim:

proxy_buffering      off;
client_max_body_size 0;

informação relacionada