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_size
adicionar 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:
proxy_request_buffering off;
corrige seu problema porque essa é a única opção relevante paraenvios(solicitações de).
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;