Fehler beim Hochladen großer Dateien (> 2 GB) über den Nginx-Reverse-Proxy in den Container

Fehler beim Hochladen großer Dateien (> 2 GB) über den Nginx-Reverse-Proxy in den Container

Ich führe eine Anwendung in einem Docker-Container aus (https://github.com/filebrowser/filebrowser/), auf den ich sehr große (> 2) GB große Dateien hochzuladen versuche. Der Container stellt die App auf einem nicht standardmäßigen Port auf dem lokalen Host bereit, mit dem ich mich über einen Reverse-Proxy verbinde (sodass ich mehrere Apps auf einer Maschine ausführen kann). Das Problem ist, dass ein Fehler auftritt, wenn ich eine Datei mit mehr als 2097152 Byte hochlade. Ich sehe, dass die Datei vollständig auf nginx hochgeladen wird und dass sie es teilweise in die containerisierte App schafft, dann aber lange bei 2097152 Byte hängt, bevor ein Fehler auftritt, der dazu führt, dass die containerisierte App einen unerwarteten EOF-Fehler ausgibt. Ich vermute, dass etwas mit nginx nicht stimmt, denn wenn ich eine Datei direkt in die containerisierte App hochlade, funktioniert es einwandfrei. Ich habe versucht, der nginx-Konfiguration verschiedene Anweisungen hinzuzufügen, und bin ratlos. Meine nginx-Konfiguration für die Site ist:

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

Der Fehler, den ich in nginx bekomme, ist:

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/" 

Bearbeiten: Nach langem Suchen scheint die Lösung darin zu bestehen, die proxy_buffer_size, proxy_buffers, und zu entfernen proxy_busy_buffer_sizeund hinzuzufügen: proxy_request_buffering off;Ich weiß nicht, warum das funktioniert, aber es funktioniert. Die geänderten Zeilen in der Konfiguration waren:

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

Antwort1

Einfache Antwort:


Alle anderen Optionen gelten nur fürDownloadsan den Client (Antworten). Zitat aus den Dokumenten:

Antwort2

Ich habe auch das 2-GB-Limit erreicht. proxy_request_buffering off;hat bei mir nicht funktioniert. Das Hinzufügen der beiden folgenden Optionen zum /Standort ist das Einzige, was bei mir funktioniert hat:

proxy_buffering      off;
client_max_body_size 0;

verwandte Informationen