The Basics
- Nextcloud Server version (e.g., 29.x.x):
NextCloud 32.0.3
- Operating system and version (e.g., Ubuntu 24.04):
Debian GNU/Linux 13 (trixie) x86_64
- Web server and version (e.g, Apache 2.4.25):
2.5.65
- Reverse proxy and version _(e.g. nginx 1.27.2)
nginx 29.4
- PHP version (e.g, 8.3):
8.3.29
- Is this the first time you’ve seen this error? (Yes / No):
Yes
- When did this problem seem to first start?
Initial Install
- Installation method (e.g. AlO, NCP, Bare Metal/Archive, etc.)
docker compose
- Are you using CloudfIare, mod_security, or similar? (Yes / No)
No
Summary of the issue you are facing:
NextCloud is running at a custom webroot (/nextcloud) behind nginx. I have the apps “Collabora Online - Built-in CODE Server” and “Nextcloud Office” installed. When attempting to edit documents with NextCloud office, the website sends a POST request to URL that does not have the correct webroot which 404s. Specifically, it attempts https://dserver/custom_apps/ instead of https://dserver/nextcloud/custom_apps/. After a few seconds the page says “Document loading failed”
Something similar happens in the Administration Settings > Office page with an iframe
Notable weird things I am doing:
-
I am not using a TLD, I am only using dserver. This is fine for my use case because I am only running this on my home network.
-
I am using self signed certs. I had to specify administration settings > office > Use Your Own Server > Disable Certification Verification = True
After I make that change, the radio button jumps back to “built-in Collabora” and it appears working according to according to settings page.
Steps to replicate it (hint: details matter!):
-
Log into
https://dserver/nextcloud/ -
Attempt to edit “Welcome to Nextcloud Hub.docx”
-
Observe editor failure
Log entries
Nextcloud
Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.
This may not be related, but I am including anyway
{"reqId":"PW9cMMSSVbLTNPoNu7KZ","level":2,"time":"2025-12-30T20:52:03+00:00","remoteAddr":"192.168.100.140","user":"admin","app":"PHP","method":"GET","url":"/nextcloud/index.phpapps/categories","message":"Trying to access array offset on null at /var/www/html/lib/private/App/AppStore/Fetcher/Fetcher.php#177","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0","version":"32.0.3.2","data":{"app":"PHP"},"id":"6954453dcfff4"}
{"reqId":"mrLTe19KJO3KahrvplSH","level":3,"time":"2025-12-29T21:35:34+00:00","remoteAddr":"192.168.100.140","user":"admin","app":"richdocuments","method":"GET","url":"/nextcloud/index.phpdocuments/settings/check","message":"cURL error 28: Connection timed out after 5002 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://lool2.friprogramvarusyndikatet.se/hosting/discovery","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0","version":"32.0.3.2","exception":{"Exception":"GuzzleHttp\\Exception\\ConnectException","Message":"cURL error 28: Connection timed out after 5002 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://lool2.friprogramvarusyndikatet.se/hosting/discovery","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php","line":205,"function":"createRejection","class":"GuzzleHttp\\Handler\\CurlFactory","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php","line":157,"function":"finishError","class":"GuzzleHttp\\Handler\\CurlFactory","type":"::","args":[{"__class__":"GuzzleHttp\\Handler\\CurlHandler"},"*** sensitive parameters replaced ***",{"__class__":"GuzzleHttp\\Handler\\CurlFactory"}]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlHandler.php","line":47,"function":"finish","class":"GuzzleHttp\\Handler\\CurlFactory","type":"::","args":[{"__class__":"GuzzleHttp\\Handler\\CurlHandler"},"*** sensitive parameters replaced ***",{"__class__":"GuzzleHttp\\Handler\\CurlFactory"}]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php","line":142,"function":"__invoke","class":"GuzzleHttp\\Handler\\CurlHandler","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/private/Http/Client/DnsPinMiddleware.php","line":101,"function":"GuzzleHttp\\{closure}","class":"GuzzleHttp\\Middleware","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php","line":35,"function":"OC\\Http\\Client\\{closure}","class":"OC\\Http\\Client\\DnsPinMiddleware","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php","line":31,"function":"__invoke","class":"GuzzleHttp\\PrepareBodyMiddleware","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php","line":71,"function":"GuzzleHttp\\{closure}","class":"GuzzleHttp\\Middleware","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php","line":66,"function":"__invoke","class":"GuzzleHttp\\RedirectMiddleware","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/HandlerStack.php","line":75,"function":"GuzzleHttp\\{closure}","class":"GuzzleHttp\\Middleware","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php","line":333,"function":"__invoke","class":"GuzzleHttp\\HandlerStack","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php","line":169,"function":"transfer","class":"GuzzleHttp\\Client","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php","line":189,"function":"requestAsync","class":"GuzzleHttp\\Client","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/private/Http/Client/Client.php","line":206,"function":"request","class":"GuzzleHttp\\Client","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***",{"verify":"/var/www/html/resources/config/ca-bundle.crt","timeout":5,"nextcloud":{"allow_local_address":true},"headers":{"User-Agent":"Nextcloud Server Crawler","Accept-Encoding":"gzip"},"synchronous":true}]},{"file":"/var/www/html/custom_apps/richdocuments/lib/Service/DiscoveryService.php","line":61,"function":"get","class":"OC\\Http\\Client\\Client","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/custom_apps/richdocuments/lib/Service/CachedRequestService.php","line":74,"function":"sendRequest","class":"OCA\\Richdocuments\\Service\\DiscoveryService","type":"->","args":[{"__class__":"OC\\Http\\Client\\Client"}]},{"file":"/var/www/html/custom_apps/richdocuments/lib/Service/ConnectivityService.php","line":28,"function":"fetch","class":"OCA\\Richdocuments\\Service\\CachedRequestService","type":"->","args":[]},{"file":"/var/www/html/custom_apps/richdocuments/lib/Controller/SettingsController.php","line":73,"function":"testDiscovery","class":"OCA\\Richdocuments\\Service\\ConnectivityService","type":"->","args":[{"__class__":"Symfony\\Component\\Console\\Output\\NullOutput"}]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":204,"function":"checkSettings","class":"OCA\\Richdocuments\\Controller\\SettingsController","type":"->","args":[]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":118,"function":"executeController","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Richdocuments\\Controller\\SettingsController"},"checkSettings"]},{"file":"/var/www/html/lib/private/AppFramework/App.php","line":153,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Richdocuments\\Controller\\SettingsController"},"checkSettings"]},{"file":"/var/www/html/lib/private/Route/Router.php","line":321,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\Richdocuments\\Controller\\SettingsController","checkSettings",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"richdocuments.settings.checksettings"}]},{"file":"/var/www/html/lib/base.php","line":1061,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/apps/richdocuments/settings/check"]},{"file":"/var/www/html/index.php","line":25,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php","Line":275,"message":"cURL error 28: Connection timed out after 5002 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://lool2.friprogramvarusyndikatet.se/hosting/discovery","exception":[],"CustomMessage":"cURL error 28: Connection timed out after 5002 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://lool2.friprogramvarusyndikatet.se/hosting/discovery"},"id":"6954453dd001e"}
{"reqId":"PW9cMMSSVbLTNPoNu7KZ","level":3,"time":"2025-12-30T20:52:03+00:00","remoteAddr":"192.168.100.140","user":"admin","app":"index","method":"GET","url":"/nextcloud/index.phpapps/categories","message":"array_map(): Argument #2 ($array) must be of type array, null given in file '/var/www/html/apps/settings/lib/Controller/AppSettingsController.php' line 286","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0","version":"32.0.3.2","exception":{"Exception":"Exception","Message":"array_map(): Argument #2 ($array) must be of type array, null given in file '/var/www/html/apps/settings/lib/Controller/AppSettingsController.php' line 286","Code":0,"Trace":[{"file":"/var/www/html/lib/private/AppFramework/App.php","line":153,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Settings\\Controller\\AppSettingsController"},"listCategories"]},{"file":"/var/www/html/lib/private/Route/Router.php","line":321,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\Settings\\Controller\\AppSettingsController","listCategories",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"settings.appsettings.listcategories"}]},{"file":"/var/www/html/lib/base.php","line":1061,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/settings/apps/categories"]},{"file":"/var/www/html/index.php","line":25,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","Line":150,"Previous":{"Exception":"TypeError","Message":"array_map(): Argument #2 ($array) must be of type array, null given","Code":0,"Trace":[{"file":"/var/www/html/apps/settings/lib/Controller/AppSettingsController.php","line":286,"function":"array_map","args":[{"__class__":"Closure"},null]},{"file":"/var/www/html/apps/settings/lib/Controller/AppSettingsController.php","line":279,"function":"getAllCategories","class":"OCA\\Settings\\Controller\\AppSettingsController","type":"->","args":[]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":204,"function":"listCategories","class":"OCA\\Settings\\Controller\\AppSettingsController","type":"->","args":[]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":118,"function":"executeController","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Settings\\Controller\\AppSettingsController"},"listCategories"]},{"file":"/var/www/html/lib/private/AppFramework/App.php","line":153,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Settings\\Controller\\AppSettingsController"},"listCategories"]},{"file":"/var/www/html/lib/private/Route/Router.php","line":321,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\Settings\\Controller\\AppSettingsController","listCategories",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"settings.appsettings.listcategories"}]},{"file":"/var/www/html/lib/base.php","line":1061,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/settings/apps/categories"]},{"file":"/var/www/html/index.php","line":25,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/apps/settings/lib/Controller/AppSettingsController.php","Line":286},"message":"array_map(): Argument #2 ($array) must be of type array, null given in file '/var/www/html/apps/settings/lib/Controller/AppSettingsController.php' line 286","exception":[],"CustomMessage":"array_map(): Argument #2 ($array) must be of type array, null given in file '/var/www/html/apps/settings/lib/Controller/AppSettingsController.php' line 286"},"id":"6954502b45b9b"}
Web Browser
If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.
[getWopiUrl] https://dserver/nextcloud/index.php/apps/richdocuments/wopi/files/68_oc6n0a43q7vr url.js:28:10
POST
https://dserver/custom_apps/richdocumentscode/proxy.php?req=/browser/a246f9ab3c/cool.html?WOPISrc=https://dserver/nextcloud/index.php/apps/richdocuments/wopi/files/68_oc6n0a43q7vr&lang=en&closebutton=1&revisionhistory=1
[HTTP/1.1 404 Not Found 7ms]
Document loading failed due to timeout: Please check for failing network requests Office.vue:346:1
Web server / Reverse Proxy
Ran this command right after refreshing the editor page in Firefox docker compose logs nginx | grep -i -e "next" -e "app" -e "404" | tail -n 50
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:26 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1068 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:29 +0000] "GET /nextcloud/apps/logreader/api/poll?lastReqId=zzVZZeIqp6lWDb6XeLrT HTTP/1.1" 200 22 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:29 +0000] "GET /nextcloud/apps/files/files/68?dir=/Documents&editing=false&openfile=true HTTP/1.1" 200 12563 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/apps/text/js/text-init.mjs?v=89e9d472-4 HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/index.php/apps/files/preview-service-worker.js HTTP/1.1" 200 5271 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "REPORT /nextcloud/remote.php/dav/files/admin/ HTTP/1.1" 207 156 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/ocs/v2.php/apps/files/api/v1/folder-tree?path=%2F&depth=1 HTTP/1.1" 200 94 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "PROPFIND /nextcloud/remote.php/dav/files/admin/Documents/ HTTP/1.1" 207 1104 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/ocs/v2.php/apps/guests/api/v1/groups HTTP/1.1" 200 144 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/ocs/v2.php/apps/guests/api/v1/groups HTTP/1.1" 200 144 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/apps/viewer/js/previewUtils-DGR5aPfN.chunk.mjs.map HTTP/1.1" 200 821157 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/dist/files_sharing-files_sharing_tab.js.map?v=7b9139fb03fa6792e1a7 HTTP/1.1" 200 9600 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/ocs/v2.php/apps/recommendations/api/v1/recommendations HTTP/1.1" 200 398 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/dist/files-main.js.map?v=b1d0246571b3a07799ea HTTP/1.1" 200 1021025 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:30 +0000] "GET /nextcloud/dist/files-sidebar.js.map?v=921645b12f3be37b5bbe HTTP/1.1" 200 828168 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/apps/theming/icon/files?v=3d1daabe HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/ocs/v2.php/apps/user_status/api/v1/user_status HTTP/1.1" 200 149 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "PUT /nextcloud/ocs/v2.php/apps/user_status/api/v1/heartbeat?format=json HTTP/1.1" 200 149 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/cron.php HTTP/1.1" 200 20 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/index.php/apps/files/preview-service-worker.js HTTP/1.1" 200 5271 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/dist/7883-7883.js.map?v=d2536c175df70a100c19 HTTP/1.1" 200 167243 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.1" 200 81 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/apps/notifications/js/NotificationsApp-0V1-3XAR.chunk.mjs.map HTTP/1.1" 200 117935 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/apps/files/api/v1/views HTTP/1.1" 200 46 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/ocs/v2.php/apps/text/workspace?path=%2FDocuments HTTP/1.1" 200 163 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/ocs/v2.php/apps/text/workspace?path=%2FDocuments HTTP/1.1" 200 163 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "PROPFIND /nextcloud/remote.php/dav/files/admin/Documents/Welcome%20to%20Nextcloud%20Hub.docx HTTP/1.1" 207 704 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/apps/files/api/v1/views HTTP/1.1" 200 46 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/apps/viewer/js/viewer-main.mjs.map HTTP/1.1" 200 21003 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "PUT /nextcloud/apps/text/session/67/create HTTP/1.1" 200 424 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/custom_apps/richdocumentscode/proxy.php?status HTTP/1.1" 200 15 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "POST /nextcloud/apps/text/attachments HTTP/1.1" 200 22 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "PROPFIND /nextcloud/remote.php/dav/files/admin/Documents/Readme.md HTTP/1.1" 207 639 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "PROPFIND /nextcloud/remote.php/dav/files/admin/Documents/Welcome%20to%20Nextcloud%20Hub.docx/ HTTP/1.1" 207 700 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "POST /nextcloud/apps/richdocuments/token HTTP/1.1" 200 327 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 2098 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "POST /custom_apps/richdocumentscode/proxy.php?req=/browser/a246f9ab3c/cool.html?WOPISrc=https%3A%2F%2Fdserver%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F68_oc6n0a43q7vr&lang=en&closebutton=1&revisionhistory=1 HTTP/1.1" 404 1167 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /api/config/custom.css HTTP/1.1" 200 0 "https://dserver/custom_apps/richdocumentscode/proxy.php?req=/browser/a246f9ab3c/cool.html?WOPISrc=https%3A%2F%2Fdserver%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F68_oc6n0a43q7vr&lang=en&closebutton=1&revisionhistory=1" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/custom_apps/richdocuments/js/richdocuments-src_view_Viewer_vue.js.map?v=37ccf50bff71a24c7fc7 HTTP/1.1" 200 43414 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "GET /nextcloud/custom_apps/richdocuments/js/richdocuments-viewer.js.map?v=b27015f3fb6e1488400b HTTP/1.1" 200 607216 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:31 +0000] "POST /nextcloud/apps/text/session/67/push HTTP/1.1" 200 368 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:32 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:32 +0000] "GET /nextcloud/index.php/apps/files/preview-service-worker.js HTTP/1.1" 200 5271 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:33 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:34 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:36 +0000] "PUT /nextcloud/ocs/v2.php/apps/user_status/api/v1/heartbeat?format=json HTTP/1.1" 200 149 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:36 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:39 +0000] "GET /nextcloud/apps/logreader/api/poll?lastReqId=zzVZZeIqp6lWDb6XeLrT HTTP/1.1" 200 22 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:41 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
nginx | 192.168.100.140 - - [30/Dec/2025:22:06:47 +0000] "POST /nextcloud/apps/text/session/67/sync HTTP/1.1" 200 1084 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0"
Configuration
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name dserver;
return 301 https://dserver/;
}
server {
listen 443 ssl;
server_name dserver;
include subfolders-enabled/*.conf;
ssl_certificate /etc/letsencrypt/server.crt;
ssl_certificate_key /etc/letsencrypt/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
}
nextcloud.conf (nginx)
#location ^~ / {
# return 302 $scheme://$host/jellyfin/;
#}
location ^~ /nextcloud {
return 302 $scheme://$host/nextcloud/;
}
location ^~ /nextcloud/ {
# Proxy main traffic
proxy_pass http://nextcloud:80/;
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;
# Security headers
add_header X-Content-Type-Options nosniff;
#add_header X-XSS-Protection "1; mode=block";
#add_header X-Robots-Tag none;
#add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
#add_header X-Frame-Options SAMEORIGIN;
# Timeout settings for large file uploads
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 3600s;
# HSTS (optional - uncomment if you're using HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Increase max upload size (adjust as needed)
client_max_body_size 10G;
}
# location ~ ^/nextcloud/(.*\.php)$ {
# include fastcgi_params;
# fastcgi_pass your_fastcgi_backend; # Replace with your PHP-FPM backend
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
#}
# Deny access to sensitive files
#location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {
# deny all;
#}
docker-compose.xml (partial)
# NextCloud
# redis:
# image: redis:alpine
# restart: always
# networks:
# - "ncnet"
db:
image: mariadb:lts
container_name: nextcloud-compose-db
restart: always
command: --transaction-isolation=READ-COMMITTED
volumes:
- /srv/nextcoud/:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PW}
- MYSQL_PASSWORD=${DB_PW}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=${DB_USER}
networks:
- "ncnet"
nextcloud:
image: nextcloud
container_name: nextcloud-compose
restart: always
depends_on:
# - redis
- db
volumes:
- /etc/docker/nextcloud/:/var/www/html
environment:
- MYSQL_PASSWORD=${DB_PW}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=${DB_USER}
- MYSQL_HOST=db
- NEXTCLOUD_DEFAULT_PHONE_REGION=US
networks:
- "ncnet"
- "net"
Nextcloud
The output of occ config:list system
My understanding is that url in apps_pathsget appended to the value of overwritewebroot. Adding the webroot /nextcloudto htaccess.RewriteBase does not seem to have an impact.
{
"system": {
"memcache.local": "\\OC\\Memcache\\APCu",
"apps_paths": [
{
"path": "\/var\/www\/html\/apps",
"url": "\/apps",
"writable": false
},
{
"path": "\/var\/www\/html\/custom_apps",
"url": "\/custom_apps",
"writable": true
}
],
"upgrade.disable-web": true,
"instanceid": "***REMOVED SENSITIVE VALUE***",
"overwritewebroot": "\/nextcloud",
"htaccess.RewriteBase": "\/",
"htaccess.IgnoreFrontController": true,
"passwordsalt": "***REMOVED SENSITIVE VALUE***",
"secret": "***REMOVED SENSITIVE VALUE***",
"trusted_domains": [
"dserver"
],
"datadirectory": "***REMOVED SENSITIVE VALUE***",
"dbtype": "mysql",
"version": "32.0.3.2",
"overwrite.cli.url": "https:\/\/dserver\/nextcloud",
"dbname": "***REMOVED SENSITIVE VALUE***",
"overwriteprotocol": "https",
"dbhost": "***REMOVED SENSITIVE VALUE***",
"dbtableprefix": "oc_",
"mysql.utf8mb4": true,
"dbuser": "***REMOVED SENSITIVE VALUE***",
"dbpassword": "***REMOVED SENSITIVE VALUE***",
"installed": true,
"config_preset": 2,
"app_install_overwrite": [
"breezedark"
],
"defaultapp": "files",
"maintenance_window_start": 1,
"maintenance": false,
"check_for_working_wellknown_setup": false
}
}
Apps
The output of occ app:list
Enabled:
- breezedark: 29.0.0
- bruteforcesettings: 5.0.0-dev.0
- circles: 32.0.0
- cloud_federation_api: 1.16.0
- dav: 1.34.2
- federatedfilesharing: 1.22.0
- files: 2.4.0
- files_downloadlimit: 5.0.0-dev.0
- files_external: 1.24.0
- files_pdfviewer: 5.0.0-dev.0
- files_reminders: 1.5.0
- files_sharing: 1.24.1
- files_trashbin: 1.22.0
- files_versions: 1.25.0
- firstrunwizard: 5.0.0-dev.0
- guests: 4.6.0
- logreader: 5.0.0-dev.0
- lookup_server_connector: 1.20.0
- notifications: 5.0.0-dev.0
- oauth2: 1.20.0
- password_policy: 4.0.0-dev.0
- photos: 5.0.0-dev.1
- privacy: 4.0.0-dev.0
- profile: 1.1.0
- provisioning_api: 1.22.0
- recommendations: 5.0.0-dev.0
- related_resources: 3.0.0-dev.0
- richdocuments: 9.0.2
- richdocumentscode: 25.4.702
- serverinfo: 4.0.0-dev.0
- settings: 1.15.1
- sharebymail: 1.22.0
- support: 4.0.0-dev.0
- systemtags: 1.22.0
- text: 6.0.1
- theming: 2.7.0
- twofactor_backupcodes: 1.21.0
- updatenotification: 1.22.0
- user_status: 1.12.0
- viewer: 5.0.0-dev.0
- webhook_listeners: 1.3.0
- workflowengine: 2.14.0
Disabled:
- activity: 5.0.0-dev.0 (installed 5.0.0-dev.0)
- admin_audit: 1.22.0
- app_api: 32.0.0 (installed 32.0.0)
- comments: 1.22.0 (installed 1.22.0)
- contactsinteraction: 1.13.1 (installed 1.13.1)
- dashboard: 7.12.0 (installed 7.12.0)
- encryption: 2.20.0
- federation: 1.22.0 (installed 1.22.0)
- google_synchronization: 4.1.0 (installed 4.1.0)
- integration_google: 4.3.0 (installed 4.3.0)
- nextcloud_announcements: 4.0.0-dev.0 (installed 4.0.0-dev.0)
- survey_client: 4.0.0-dev.0 (installed 4.0.0-dev.0)
- suspicious_login: 10.0.0-dev.0
- twofactor_nextcloud_notification: 6.0.0-dev.0
- twofactor_totp: 14.0.0
- user_ldap: 1.23.0
- weather_status: 1.12.0 (installed 1.12.0)


