Nextcloud version (eg, 20.0.5): 26.0.2
Operating system and version (eg, Ubuntu 20.04): Debian with Docker (fpm-version)
Apache or nginx version (eg, Apache 2.4.25): docker: nginx 1.21.6
PHP version (eg, 7.4): 8.2.6
The issue you are facing:
When using HTTP/2 and uploading folders, I get on a few (random?) files the error
expected filesize is 10485760 but read 10477568
the difference is always 8192 bytes…
2nd problem: while uploading big files – as soon as they were chunked, on webinterface, there is no remaining time any more on the upload-bar, just “uploading…”
Is this the first time you’ve seen this error?
No, I see thin on all of my instances (2 schools, 1 private)! With different setups (all with docker):
-
server: Nextcloud v24 with
nextcloud:apache
(docker/docker-compose.yml at master · nextcloud/docker · GitHub) behind Traefik v2. When conecting to the Nextcloud-container directly via port-forwarding, the connection is on HTTP/1.1 → all working. Traefik makes HTTP/2-connections → problems! -
server: Nextcloud v26 with
nextcloud:fpm-alpine
(docker/.examples/docker-compose/insecure/mariadb/fpm at master · nextcloud/docker · GitHub) behind Traefik v2. Same problem.
Try on 2. server: activating HTTP/2 on nginx-container and connecting directly via docker-port-forwarding (ports: 12443:443
) → same problem! (nginx configuration from here: NGINX configuration — Nextcloud latest Administration Manual latest documentation)
So always when connecting with HTTP/2 activated – with or without Traefik-proxy – the problem appears.
Steps to replicate it:
- Docker with Traefik proxy
- use docker/docker-compose.yml at master · nextcloud/docker · GitHub (or fpm-version) with traefik-labels
app:
networks:
- default
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.nextcloud.entrypoints=http"
- "traefik.http.routers.nextcloud.rule=Host(`nextcloud.***`)"
- "traefik.http.routers.nextcloud.middlewares=https-redirect"
- "traefik.http.routers.nextcloud-secure.entrypoints=https"
- "traefik.http.routers.nextcloud-secure.rule=Host(`nextcloud.***`)"
- "traefik.http.routers.nextcloud-secure.tls=true"
- "traefik.http.routers.nextcloud-secure.tls.certresolver=http"
- "traefik.http.routers.nextcloud-secure.service=nextcloud"
- "traefik.http.services.nextcloud.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nextcloud-secure.middlewares=nextcloud-dav,nextcloud-headers,default@file"
- "traefik.http.middlewares.nextcloud-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.nextcloud-headers.headers.customRequestHeaders.X-Forwarded-Ssl=on"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.regex=`https://(.*)/.well-known/(?:card|cal)dav`"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.replacement=`https://$${1}/remote.php/dav`"
- Upload a folder with many (~30) big files
The output of your Nextcloud log in Admin > Logging:
Sabre\DAV\Exception\BadRequest: Erwartete Dateigröße von 10485760 bytes, aber 10477568 bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein.
/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php - line 149:
OCA\DAV\Connector\Sabre\File->put("*** sensiti ... *")
/var/www/html/apps/dav/lib/Upload/UploadFolder.php - line 50:
OCA\DAV\Connector\Sabre\Directory->createFile("*** sensiti ... *")
/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php - line 1098:
OCA\DAV\Upload\UploadFolder->createFile("*** sensiti ... *")
/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php - line 504:
Sabre\DAV\Server->createFile("*** sensiti ... *")
/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php - line 89:
Sabre\DAV\CorePlugin->httpPut([ "Sabre\\HTTP\\Request"], [ "Sabre\\HTTP\\Response"])
/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php - line 472:
Sabre\DAV\Server->emit("method:PUT", [ [ "Sabre\\ ... ]])
/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php - line 253:
Sabre\DAV\Server->invokeMethod([ "Sabre\\HTTP\\Request"], [ "Sabre\\HTTP\\Response"])
/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php - line 321:
Sabre\DAV\Server->start()
/var/www/html/apps/dav/lib/Server.php - line 366:
Sabre\DAV\Server->exec()
/var/www/html/apps/dav/appinfo/v2/remote.php - line 35:
OCA\DAV\Server->exec()
/var/www/html/remote.php - line 172:
require_once("/var/www/ht ... p")
The output of your config.php file in /path/to/nextcloud
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'redis' =>
array (
'host' => 'redis',
'password' => '***',
'port' => 6379,
),
'instanceid' => '***',
'passwordsalt' => '***',
'secret' => '***',
'trusted_domains' =>
array (
0 => 'nextcloud.***',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '26.0.2.1',
'overwrite.cli.url' => 'https://nextcloud.***',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => '***',
'installed' => true,
'trusted_proxies' =>
array (
0 => '172.18.0.7',
),
'overwritehost' => 'nextcloud.***',
'overwriteprotocol' => 'https',
'overwritewebroot' => '/',
'overwriteconaddr' => '^172\\.18\\.0\\.7$',
'maintenance' => false,
'loglevel' => 2,
'default_phone_region' => 'de',
'trashbin_retention_obligation' => 'auto,30',
'versions_retention_obligation' => 'auto,60',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
[mail-settings]
'theme' => '',
);
(also trying overwritehost => 'nextcloud.***:12443'
and overwrite.cli.url => 'https://nextcloud.***:12443'
for direct connection without Traefik on my 2nd server)
The output of your Apache/nginx/system log in /var/log/____
:
nextcloud-web-1 | *** - - [10/Jun/2023:12:05:26 +0000] "PUT /remote.php/dav/uploads/***/web-file-upload-7e71c100f1a29e0a563dfb934b0b5481-1686397976670/1 HTTP/2.0" 408 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/113.0" "-"
Output errors in nextcloud.log in /var/www/ or as admin user in top right menu, filtering for errors. Use a pastebin service if necessary.
{"reqId":"1wNENRGdH9HBob6LJYY2","level":3,"time":"2023-06-10T12:05:26+00:00","remoteAddr":"***","user":"***","app":"no app in context","method":"PUT","url":"/remote.php/dav/uploads/***/web-file-upload-7e71c100f1a29e0a563dfb934b0b5481-1686397976670/1","message":"Erwartete Dateigr\u00f6\u00dfe von 10485760 bytes, aber 10477568 bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein.","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/113.0","version":"26.0.2.1","exception":{"Exception":"Sabre\\DAV\\Exception\\BadRequest","Message":"Erwartete Dateigr\u00f6\u00dfe von 10485760 bytes, aber 10477568 bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein.","Code":0,"Trace":[{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php","line":149,"function":"put","class":"OCA\\DAV\\Connector\\Sabre\\File","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/apps/dav/lib/Upload/UploadFolder.php","line":50,"function":"createFile","class":"OCA\\DAV\\Connector\\Sabre\\Directory","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1098,"function":"createFile","class":"OCA\\DAV\\Upload\\UploadFolder","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":504,"function":"createFile","class":"Sabre\\DAV\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPut","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PUT",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":366,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/File.php","Line":297,"message":"Erwartete Dateigr\u00f6\u00dfe von 10485760 bytes, aber 10477568 bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein.","exception":{},"CustomMessage":"Erwartete Dateigr\u00f6\u00dfe von 10485760 bytes, aber 10477568 bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein."}}
“Solution”
When disabling HTTP/2-Mode on client side in Firefox (about:config → network.http.http2.enabled = false
) all works as expected!
But that is only a solution for my private Nextcloud-server (and only for Laptop, not for iPad,…), not for my schools…
So where are the problems with HTTP/2?
Thank you an greetings
Alex
Edit:
I tried following:
Firefox — HTTPS/1.1 —> Traefik — HTTPS/2 —> Nextcloud (nginx-fpm)
That seems to work…
not working:
Firefox — HTTPS/2 —> Nextcloud (nginx-fpm)
Firefox — HTTPS/2 —> Traefik — HTTP/1.1 —> Nextcloud
Firefox — HTTPS/2 —> Traefik — HTTP/2 —> Nextcloud
furthermore: I tried with Chrome and it seems to work:
Chrome — HTTPS/2 —> Traefik — HTTP/2 —> Nextcloud
why?
Edit 2
I tried uploading one folder with chrome. And then simultaneously with Firefox (via HTTP/2!) and it crashes totally!
The tmp-files stuck:
and neither in chrome nor in firefox the upload goes on…
no files are uploaded correctly. After stopping uploading in firefox, the upload in chrome goes on without any more problems…
Simultaneous uploading with Chrome on HTTP/2 and Firefox on HTTP/1.1 is working fine!