Error al cargar archivos grandes (>2 GB) a través del proxy inverso nginx al contenedor

Error al cargar archivos grandes (>2 GB) a través del proxy inverso nginx al contenedor

Estoy ejecutando una aplicación en un contenedor acoplable (https://github.com/filebrowser/filebrowser/) en el que estoy intentando cargar archivos muy grandes (>2) GB. El contenedor expone la aplicación en un puerto no estándar en localhost al que me conecto a través de un proxy inverso (para poder ejecutar varias aplicaciones en una máquina). El problema es que cuando subo un archivo de más de 2097152 bytes, aparece un error. Puedo ver que los archivos están completamente cargados en nginx y que llegan parcialmente a la aplicación contenedorizada, pero luego se bloquean durante mucho tiempo en 2097152 bytes antes de generar un error que provoca que la aplicación contenedorizada dé un error EOF inesperado. Sospecho que hay algún problema con nginx porque cuando subo un archivo directamente a la aplicación en contenedor, funciona bien. Intenté agregar una variedad de directivas a la configuración de nginx y estoy perplejo. Mi configuración de nginx para el sitio es:

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

El error que me sale en nginx es:

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: Después de investigar mucho, parece que la solución fue eliminar proxy_buffer_size, proxy_buffersy proxy_busy_buffer_sizeagregar proxy_request_buffering off;No sé por qué funciona, pero funciona. Las líneas modificadas en la configuración fueron:

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

Respuesta1

Respuesta sencilla:


Todas las demás opciones se aplican sólo adescargasal cliente (respuestas). Citando de los documentos:

  • proxy_buffer_size

    ... tamaño del buffer utilizado para leer la primera parte delrespuestarecibido del servidor proxy...

  • proxy_buffers

    ... buffers utilizados para leer unrespuestadesde el servidor proxy...

  • proxy_busy_buffers_size

    ... Al almacenar en búferrespuestasdesde el servidor proxy...

Respuesta2

También alcancé el límite de 2 GB. proxy_request_buffering off;no funcionó para mí. Agregar las dos opciones siguientes a la /ubicación es lo único que funcionó para mí:

proxy_buffering      off;
client_max_body_size 0;

información relacionada