Bildupload geht nicht mehr seit Update auf Nextcloud 18

Hallo, seit ich auf Nextcloud 18 geupdatet habe, kann ich keine Bilder (z.B. jpg, png) mehr synchronisieren, egal ob ich sie per Browser, Desktop-Client oder Android-App hochlade. Das betrifft auch Bilder, die schon mal in der Cloud waren. Eine Kopie von ihnen führt ebenso zum Error. Vorher ging das alles ohne Probleme.
Ich habe eine gehosteten Webspeicher.

Nextcloud 18.0.4

PHP

Version: 7.2.30
Arbeitspeicher-Grenzwert: 1 GB
Maximale Ausführungszeit: 3600
Maximale Größe zum Hochladen: 1 GB

grafik

Das Log meldet nur eine einzige Warnung, wenn ich über den Admin-Account uploade, bei anderen Accounts gar nichts:

Warning	GuzzleHttp\Exception\ServerException: Server error: `GET https://apps.nextcloud.com/api/v1/categories.json` resulted in a `502 Proxy Error` response: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>502 Proxy Error</title> </head><body> <h1>Proxy E (truncated...)
    <Pfad zur Cloud>/3rdparty/guzzlehttp/guzzle/src/Middleware.php - line 66:
    GuzzleHttp\Exception\RequestException::create(GuzzleHttp\Psr7\Request {}, "*** sensiti ... *")
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 203:
    GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensiti ... *")
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 156:
    GuzzleHttp\Promise\Promise::callHandler(1, "*** sensiti ... *", [ GuzzleHttp ... l])
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/TaskQueue.php - line 47:
    GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}("*** sensiti ... *")
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 246:
    GuzzleHttp\Promise\TaskQueue->run(true)
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 223:
    GuzzleHttp\Promise\Promise->invokeWaitFn()
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 267:
    GuzzleHttp\Promise\Promise->waitIfPending()
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 225:
    GuzzleHttp\Promise\Promise->invokeWaitList()
    <Pfad zur Cloud>/3rdparty/guzzlehttp/promises/src/Promise.php - line 62:
    GuzzleHttp\Promise\Promise->waitIfPending()
    <Pfad zur Cloud>/3rdparty/guzzlehttp/guzzle/src/Client.php - line 131:
    GuzzleHttp\Promise\Promise->wait()
    <Pfad zur Cloud>/lib/private/Http/Client/Client.php - line 149:
    GuzzleHttp\Client->request("get", "https://app ... n", { proxy: nul ... e})
    <Pfad zur Cloud>/lib/private/App/AppStore/Fetcher/Fetcher.php - line 109:
    OC\Http\Client\Client->get("https://app ... n", { timeout: 1 ... }})
    <Pfad zur Cloud>/lib/private/App/AppStore/Fetcher/Fetcher.php - line 173:
    OC\App\AppStore\Fetcher\Fetcher->fetch("\"2020-04-2 ... "", "[{\"id\":\" ... ]")
    <Pfad zur Cloud>/apps/settings/lib/Controller/AppSettingsController.php - line 186:
    OC\App\AppStore\Fetcher\Fetcher->get()
    <Pfad zur Cloud>/apps/settings/lib/Controller/AppSettingsController.php - line 179:
    OCA\Settings\Controller\AppSettingsController->getAllCategories()
    <Pfad zur Cloud>/lib/private/AppFramework/Http/Dispatcher.php - line 170:
    OCA\Settings\Controller\AppSettingsController->listCategories()
    <Pfad zur Cloud>/lib/private/AppFramework/Http/Dispatcher.php - line 99:
    OC\AppFramework\Http\Dispatcher->executeController(OCA\Settings ... {}, "listCategories")
    <Pfad zur Cloud>/lib/private/AppFramework/App.php - line 125:
    OC\AppFramework\Http\Dispatcher->dispatch(OCA\Settings ... {}, "listCategories")
    <Pfad zur Cloud>/lib/private/AppFramework/Routing/RouteActionHandler.php - line 47:
    OC\AppFramework\App::main("OCA\\Settin ... r", "listCategories", OC\AppFramew ... {}, { _route: "s ... "})
    <<closure>>
    OC\AppFramework\Routing\RouteActionHandler->__invoke({ _route: "s ... "})
    <Pfad zur Cloud>/lib/private/Route/Router.php - line 299:
    call_user_func(OC\AppFramew ... {}, { _route: "s ... "})
    <Pfad zur Cloud>/lib/base.php - line 1008:
    OC\Route\Router->match("/settings/apps/categories")
    <Pfad zur Cloud>/index.php - line 38:
    OC::handleRequest()

Die Hoster bieten auch ein Webserver-Log an.
Was steht da drin?

Im Zugriffslog sieht es so aus für den Upload eines Testbild.jpg per Desktop-Client:

[25/Apr/2020:19:53:56 +0200] "PROPFIND /remote.php/dav/files/martin/ HTTP/1.1" 207 387 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:02 +0200] "GET /ocs/v2.php/apps/notifications/api/v2/notifications?format=json HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:02 +0200] "GET /ocs/v2.php/cloud/activity?start=0&count=100&format=json HTTP/1.1" 200 18367 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:03 +0200] "PROPFIND /remote.php/dav/files/martin/ HTTP/1.1" 207 19092 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:03 +0200] "PROPFIND /remote.php/dav/files/martin/Smartphone HTTP/1.1" 207 10707 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:03 +0200] "PUT /remote.php/dav/files/martin/Photos/Test.jpg HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:03 +0200] "PUT /remote.php/dav/files/martin/Photos/Testbild.jpg HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:03 +0200] "PUT /remote.php/dav/files/martin/Photos/Test.jpg HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:39 +0200] "PROPFIND /remote.php/dav/files/martin/ HTTP/1.1" 207 367 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"
[25/Apr/2020:19:54:39 +0200] "GET /ocs/v2.php/cloud/activity?start=0&count=100&format=json HTTP/1.1" 200 18367 "-" "Mozilla/5.0 (Windows) mirall/2.6.4stable-Win64 (build 20200303) (Nextcloud)"

Dieses Thema beschreibt exakt das Problem: Cannot upload images to nextcloud
Aber ich kann keinen nginx bei mir finden, wo ich was einstellen könnte.

occ files:scan --all hat nichts gebracht gegen mögliche, falsche E-Tags

Das Fehlerverhalten ist vielfältig, der Server gibt immer mal einen anderen Fehler zurück:

#=#=#=#=# Propagation starts 2020-04-27T17:30:50Z (last step: 1346 msec, total: 1346 msec)
||Smartphone/20200419_133744.jpg|INST_NEW|Down|1587787879|a1eb2295aabb3957dd32f3948ab0800a|5115818|00029390ocqyomjykkiv|10|Kein E-Tag vom Server empfangen, bitte Proxy/Gateway überprüfen|200|0|0||||
...
#=#=#=#=# Propagation starts 2020-04-27T19:45:13Z (last step: 505 msec, total: 505 msec)
||Photos/Testbild.jpg|INST_NEW|Up|1540983313||76816||2|Server hat "405 Method Not Allowed" auf "PUT <Adresse der Cloud>/index.php/apps/files/" geantwortet|405|0|0||||
...
#=#=#=#=# Propagation starts 2020-04-28T14:40:53Z (last step: 850 msec, total: 850 msec)
||Photos/Testbild.jpg|INST_NEW|Up|1540983313||76816||10|Server hat "400 Bad Request" auf "PUT <Adresse der Cloud>/index.php/apps/files/" geantwortet|400|0|0||||

Hat nicht jemand eine Idee?

Das Problem lag daran, dass automatisch folgende Regel in der .htaccess der Nextcloud-Domain angelegt worden war:
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ - [F,NC]
Ich weiß nicht, woher sie kam, scheinbar bei einem anderen Prozess mit angelegt worden.
Durch Löschen dieser Zeile ist das Problem behoben!

Das falsche etag scheint im Zuge dessen auch entstanden zu sein. Die Datei wurde per Smartphone noch hochgeladen, konnte dann aber nicht mehr per Desktop-Client runtergeladen werden aufgrund der obigen Regel.

1 Like

Die falsche Regel kam durch die Konfiguration des HotLink-Schutzes, der bei mir auch Zugriff auf Bilder blockierte!