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_size
und 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:
proxy_request_buffering off;
behebt Ihr Problem, denn das ist die einzige Option, die relevant ist fürUploads(Anfragen).
Alle anderen Optionen gelten nur fürDownloadsan den Client (Antworten). Zitat aus den Dokumenten:
proxy_buffer_size
... Größe des Puffers zum Lesen des ersten Teils derAntwortvom Proxyserver empfangen ...
proxy_buffers
... Puffer zum Lesen einesAntwortvom Proxyserver ...
proxy_busy_buffers_size
... Beim Puffern vonAntwortenvom Proxyserver ...
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;