server icon indicating copy to clipboard operation
server copied to clipboard

[Bug]: file upload slows down and timeout

Open tholeb opened this issue 1 month ago • 1 comments

⚠️ This issue respects the following points: ⚠️

Bug description

When uploading a file, the upload speed slows down up to a few bytes then timeouts.

Steps to reproduce

  1. Upload any file (select or drop)
  2. Hover on the progress bar on top and look at the upload speeds going down (< 1 KB∕s)
  3. Wait a few seconds
  4. File upload timeout

Expected behavior

Being able to upload. Right now, we can only use nextcloud as read only.

As a temporary solution, we are uploading to nextcloud via the linux files and execute php occ groupfolders:scan --all.

Nextcloud Server version

31

Operating system

Debian/Ubuntu

PHP engine version

PHP 8.3

Web server

Nginx

Database engine version

MySQL

Is this bug present after an update or on a fresh install?

None

Are you using the Nextcloud Server Encryption module?

Encryption is Disabled

What user-backends are you using?

  • [x] Default user-backend (database)
  • [x] LDAP/ Active Directory
  • [ ] SSO - SAML
  • [ ] Other

Configuration report

{
    "system": {
        "has_internet_connection": true,
        "htaccess.RewriteBase": "\/",
        "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
            }
        ],
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "password": "***REMOVED SENSITIVE VALUE***",
            "port": 6379
        },
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "overwritewebroot": "nc",
        "overwriteprotocol": "https",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "***REMOVED SENSITIVE VALUE***"
        ],
        "version": "31.0.8.1",
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "overwrite.cli.url": "https:\/\/***REMOVED SENSITIVE VALUE***\/nc\/",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "3306",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "default_language": "fr",
        "default_locale": "fr_FR",
        "default_phone_region": "FR",
        "ldapProviderFactory": "OCA\\User_LDAP\\LDAPProviderFactory",
        "maintenance": false,
        "loglevel": 2,
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpmode": "smtp",
        "mail_sendmailmode": "smtp",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": 587,
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpauthtype": "LOGIN",
        "trashbin_retention_obligation": "0, 31",
        "appstoreenabled": true,
        "maintenance_window_start": 1
    }
}

List of activated Apps

Enabled:
  - activity: 4.0.0
  - app_api: 5.0.2
  - bruteforcesettings: 4.0.0
  - checksum: 1.2.6
  - circles: 31.0.0
  - cloud_federation_api: 1.14.0
  - dav: 1.33.0
  - federatedfilesharing: 1.21.0
  - files: 2.3.1
  - files_downloadlimit: 4.0.0
  - files_pdfviewer: 4.0.0
  - files_reminders: 1.4.0
  - files_sharing: 1.23.1
  - files_trashbin: 1.21.0
  - files_versions: 1.24.0
  - groupfolders: 19.1.7
  - logreader: 4.0.0
  - lookup_server_connector: 1.19.0
  - notifications: 4.0.0
  - oauth2: 1.19.1
  - password_policy: 3.0.0
  - privacy: 3.0.0
  - profile: 1.0.0
  - provisioning_api: 1.21.0
  - recommendations: 4.0.0
  - related_resources: 2.0.0
  - serverinfo: 3.0.0
  - settings: 1.14.0
  - text: 5.0.0
  - theming: 2.6.1
  - twofactor_backupcodes: 1.20.0
  - user_ldap: 1.22.0
  - viewer: 4.0.0
  - webhook_listeners: 1.2.0
  - workflowengine: 2.13.0
Disabled:
  - admin_audit: 1.21.0 (installed 1.10.0)
  - checksum_old: 1.2.5
  - comments: 1.21.0 (installed 1.10.0)
  - contactsinteraction: 1.12.0 (installed 1.1.0)
  - dashboard: 7.11.0 (installed 7.0.0)
  - encryption: 2.19.0
  - federation: 1.21.0 (installed 1.10.1)
  - files_external: 1.23.0
  - firstrunwizard: 4.0.0 (installed 2.9.0)
  - groupfolders_old: 18.0.9
  - nextcloud_announcements: 3.0.0 (installed 1.9.0)
  - photos: 4.0.0 (installed 1.2.0)
  - sharebymail: 1.21.0 (installed 1.10.0)
  - support: 3.0.0 (installed 1.3.0)
  - survey_client: 3.0.0 (installed 1.8.0)
  - suspicious_login: 9.0.1
  - systemtags: 1.21.1 (installed 1.10.0)
  - twofactor_nextcloud_notification: 5.0.0
  - twofactor_totp: 13.0.0-dev.0
  - updatenotification: 1.21.0 (installed 1.10.0)
  - user_status: 1.11.0 (installed 1.0.1)
  - weather_status: 1.11.0 (installed 1.0.0)

Nextcloud Signing status

No errors have been found.

Nextcloud Logs

{"reqId":"7kxju6wylWx1Myaj9e0k","level":1,"time":"2025-12-09T02:45:02+00:00","remoteAddr":"","user":"--","app":"OC\\Log\\Rotate","method":"","url":"/nc/cron.php","message":"Log file \"/var/www/html/data/nextcloud.log\" was over 104857600 bytes, moved to \"/var/www/html/data/nextcloud.log.1\"","userAgent":"--","version":"31.0.8.1","data":{"app":"OC\\Log\\Rotate"}}
{"reqId":"YbB1TxzxH3EiMd6NMey6","level":1,"time":"2025-12-09T02:45:02+00:00","remoteAddr":"","user":"--","app":"user_ldap","method":"","url":"/nc/cron.php","message":"service \"updateGroups\" - groups do not seem to be configured properly, aborting.","userAgent":"--","version":"31.0.8.1","data":{"app":"user_ldap"}}
{"reqId":"w47CGg4Sm1Bq5WhmhTZF","level":1,"time":"2025-12-09T02:45:16+00:00","remoteAddr":"10.2.0.50","user":"--","app":"core","method":"GET","url":"/nc/index.php","message":"Trusted domain error. \"10.2.0.50\" tried to access using \"10.2.0.53\" as host.","userAgent":"Zabbix","version":"31.0.8.1","data":{"app":"core"}}
{"reqId":"w47CGg4Sm1Bq5WhmhTZF","level":1,"time":"2025-12-09T02:45:16+00:00","remoteAddr":"10.2.0.50","user":"--","app":"no app in context","method":"GET","url":"/nc/index.php","message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","userAgent":"Zabbix","version":"31.0.8.1","exception":{"Exception":"Symfony\\Component\\Routing\\Exception\\RouteNotFoundException","Message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Route/Router.php","line":387,"function":"generate","class":"Symfony\\Component\\Routing\\Generator\\UrlGenerator","type":"->","args":["ocs.password_policy.api.generate",[],1]},{"file":"/var/www/html/lib/private/Route/CachingRouter.php","line":50,"function":"generate","class":"OC\\Route\\Router","type":"->","args":["ocs.password_policy.api.generate",[],false]},{"file":"/var/www/html/lib/private/URLGenerator.php","line":99,"function":"generate","class":"OC\\Route\\CachingRouter","type":"->","args":["ocs.password_policy.API.generate",[],false]},{"file":"/var/www/html/apps/password_policy/lib/Capabilities.php","line":66,"function":"linkToOCSRouteAbsolute","class":"OC\\URLGenerator","type":"->","args":["password_policy.API.generate"]},{"file":"/var/www/html/lib/private/CapabilitiesManager.php","line":61,"function":"getCapabilities","class":"OCA\\Password_Policy\\Capabilities","type":"->","args":[]},{"file":"/var/www/html/lib/private/Template/JSConfigHelper.php","line":139,"function":"getCapabilities","class":"OC\\CapabilitiesManager","type":"->","args":[false,true]},{"file":"/var/www/html/lib/private/TemplateLayout.php","line":233,"function":"getConfig","class":"OC\\Template\\JSConfigHelper","type":"->","args":[]},{"file":"/var/www/html/lib/private/legacy/OC_Template.php","line":120,"function":"__construct","class":"OC\\TemplateLayout","type":"->","args":["guest","core"]},{"file":"/var/www/html/lib/private/Template/Base.php","line":113,"function":"fetchPage","class":"OC_Template","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":828,"function":"printPage","class":"OC\\Template\\Base","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":1192,"function":"init","class":"OC","type":"::","args":[]},{"file":"/var/www/html/index.php","line":22,"args":["/var/www/html/lib/base.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/symfony/routing/Generator/UrlGenerator.php","Line":134,"message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","exception":{},"CustomMessage":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist."}}
{"reqId":"w47CGg4Sm1Bq5WhmhTZF","level":1,"time":"2025-12-09T02:45:16+00:00","remoteAddr":"10.2.0.50","user":"--","app":"no app in context","method":"GET","url":"/nc/index.php","message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","userAgent":"Zabbix","version":"31.0.8.1","exception":{"Exception":"Symfony\\Component\\Routing\\Exception\\RouteNotFoundException","Message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Route/Router.php","line":387,"function":"generate","class":"Symfony\\Component\\Routing\\Generator\\UrlGenerator","type":"->","args":["ocs.password_policy.api.validate",[],1]},{"file":"/var/www/html/lib/private/Route/CachingRouter.php","line":50,"function":"generate","class":"OC\\Route\\Router","type":"->","args":["ocs.password_policy.api.validate",[],false]},{"file":"/var/www/html/lib/private/URLGenerator.php","line":99,"function":"generate","class":"OC\\Route\\CachingRouter","type":"->","args":["ocs.password_policy.API.validate",[],false]},{"file":"/var/www/html/apps/password_policy/lib/Capabilities.php","line":67,"function":"linkToOCSRouteAbsolute","class":"OC\\URLGenerator","type":"->","args":["password_policy.API.validate"]},{"file":"/var/www/html/lib/private/CapabilitiesManager.php","line":61,"function":"getCapabilities","class":"OCA\\Password_Policy\\Capabilities","type":"->","args":[]},{"file":"/var/www/html/lib/private/Template/JSConfigHelper.php","line":139,"function":"getCapabilities","class":"OC\\CapabilitiesManager","type":"->","args":[false,true]},{"file":"/var/www/html/lib/private/TemplateLayout.php","line":233,"function":"getConfig","class":"OC\\Template\\JSConfigHelper","type":"->","args":[]},{"file":"/var/www/html/lib/private/legacy/OC_Template.php","line":120,"function":"__construct","class":"OC\\TemplateLayout","type":"->","args":["guest","core"]},{"file":"/var/www/html/lib/private/Template/Base.php","line":113,"function":"fetchPage","class":"OC_Template","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":828,"function":"printPage","class":"OC\\Template\\Base","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":1192,"function":"init","class":"OC","type":"::","args":[]},{"file":"/var/www/html/index.php","line":22,"args":["/var/www/html/lib/base.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/symfony/routing/Generator/UrlGenerator.php","Line":134,"message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","exception":{},"CustomMessage":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist."}}
{"reqId":"f5NGSJtA0m0OK9d3e0Bn","level":1,"time":"2025-12-09T02:45:46+00:00","remoteAddr":"10.2.0.50","user":"--","app":"core","method":"GET","url":"/nc/index.php","message":"Trusted domain error. \"10.2.0.50\" tried to access using \"10.2.0.53\" as host.","userAgent":"Zabbix","version":"31.0.8.1","data":{"app":"core"}}
{"reqId":"f5NGSJtA0m0OK9d3e0Bn","level":1,"time":"2025-12-09T02:45:46+00:00","remoteAddr":"10.2.0.50","user":"--","app":"no app in context","method":"GET","url":"/nc/index.php","message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","userAgent":"Zabbix","version":"31.0.8.1","exception":{"Exception":"Symfony\\Component\\Routing\\Exception\\RouteNotFoundException","Message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Route/Router.php","line":387,"function":"generate","class":"Symfony\\Component\\Routing\\Generator\\UrlGenerator","type":"->","args":["ocs.password_policy.api.generate",[],1]},{"file":"/var/www/html/lib/private/Route/CachingRouter.php","line":50,"function":"generate","class":"OC\\Route\\Router","type":"->","args":["ocs.password_policy.api.generate",[],false]},{"file":"/var/www/html/lib/private/URLGenerator.php","line":99,"function":"generate","class":"OC\\Route\\CachingRouter","type":"->","args":["ocs.password_policy.API.generate",[],false]},{"file":"/var/www/html/apps/password_policy/lib/Capabilities.php","line":66,"function":"linkToOCSRouteAbsolute","class":"OC\\URLGenerator","type":"->","args":["password_policy.API.generate"]},{"file":"/var/www/html/lib/private/CapabilitiesManager.php","line":61,"function":"getCapabilities","class":"OCA\\Password_Policy\\Capabilities","type":"->","args":[]},{"file":"/var/www/html/lib/private/Template/JSConfigHelper.php","line":139,"function":"getCapabilities","class":"OC\\CapabilitiesManager","type":"->","args":[false,true]},{"file":"/var/www/html/lib/private/TemplateLayout.php","line":233,"function":"getConfig","class":"OC\\Template\\JSConfigHelper","type":"->","args":[]},{"file":"/var/www/html/lib/private/legacy/OC_Template.php","line":120,"function":"__construct","class":"OC\\TemplateLayout","type":"->","args":["guest","core"]},{"file":"/var/www/html/lib/private/Template/Base.php","line":113,"function":"fetchPage","class":"OC_Template","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":828,"function":"printPage","class":"OC\\Template\\Base","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":1192,"function":"init","class":"OC","type":"::","args":[]},{"file":"/var/www/html/index.php","line":22,"args":["/var/www/html/lib/base.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/symfony/routing/Generator/UrlGenerator.php","Line":134,"message":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist.","exception":{},"CustomMessage":"Unable to generate a URL for the named route \"ocs.password_policy.api.generate\" as such route does not exist."}}
{"reqId":"f5NGSJtA0m0OK9d3e0Bn","level":1,"time":"2025-12-09T02:45:46+00:00","remoteAddr":"10.2.0.50","user":"--","app":"no app in context","method":"GET","url":"/nc/index.php","message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","userAgent":"Zabbix","version":"31.0.8.1","exception":{"Exception":"Symfony\\Component\\Routing\\Exception\\RouteNotFoundException","Message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Route/Router.php","line":387,"function":"generate","class":"Symfony\\Component\\Routing\\Generator\\UrlGenerator","type":"->","args":["ocs.password_policy.api.validate",[],1]},{"file":"/var/www/html/lib/private/Route/CachingRouter.php","line":50,"function":"generate","class":"OC\\Route\\Router","type":"->","args":["ocs.password_policy.api.validate",[],false]},{"file":"/var/www/html/lib/private/URLGenerator.php","line":99,"function":"generate","class":"OC\\Route\\CachingRouter","type":"->","args":["ocs.password_policy.API.validate",[],false]},{"file":"/var/www/html/apps/password_policy/lib/Capabilities.php","line":67,"function":"linkToOCSRouteAbsolute","class":"OC\\URLGenerator","type":"->","args":["password_policy.API.validate"]},{"file":"/var/www/html/lib/private/CapabilitiesManager.php","line":61,"function":"getCapabilities","class":"OCA\\Password_Policy\\Capabilities","type":"->","args":[]},{"file":"/var/www/html/lib/private/Template/JSConfigHelper.php","line":139,"function":"getCapabilities","class":"OC\\CapabilitiesManager","type":"->","args":[false,true]},{"file":"/var/www/html/lib/private/TemplateLayout.php","line":233,"function":"getConfig","class":"OC\\Template\\JSConfigHelper","type":"->","args":[]},{"file":"/var/www/html/lib/private/legacy/OC_Template.php","line":120,"function":"__construct","class":"OC\\TemplateLayout","type":"->","args":["guest","core"]},{"file":"/var/www/html/lib/private/Template/Base.php","line":113,"function":"fetchPage","class":"OC_Template","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":828,"function":"printPage","class":"OC\\Template\\Base","type":"->","args":[]},{"file":"/var/www/html/lib/base.php","line":1192,"function":"init","class":"OC","type":"::","args":[]},{"file":"/var/www/html/index.php","line":22,"args":["/var/www/html/lib/base.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/symfony/routing/Generator/UrlGenerator.php","Line":134,"message":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist.","exception":{},"CustomMessage":"Unable to generate a URL for the named route \"ocs.password_policy.api.validate\" as such route does not exist."}}

Additional info

We are using a docker image to host nextcloud.

Nextcloud is behind 2 nginx instances, here are the configs :

  • The nginx where nextcloud is installed :
location /nc/ {
  proxy_buffering off;
  client_max_body_size 0;
  client_body_timeout 1d;
  proxy_read_timeout 1d;
  proxy_send_timeout 1d;
  proxy_headers_hash_max_size 512;
  proxy_headers_hash_bucket_size 64;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://nextcloud-app:80/; // container
}
  • The second nginx (on another machine) :
location /nc/ {
  proxy_buffering off;
  client_max_body_size 0;
  client_body_timeout 1d;
  proxy_read_timeout 1d;
  proxy_send_timeout 1d;
  proxy_headers_hash_max_size 512;
  proxy_headers_hash_bucket_size 64;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  add_header Front-End-Https on;
  proxy_pass http://<nextcloud_server>:80/nc/;
}

tholeb avatar Dec 10 '25 14:12 tholeb

Here is a video of the bug :

https://github.com/user-attachments/assets/08a3a2c3-0770-40f4-bd6c-4dff44352174

Also, we are using group folders.

tholeb avatar Dec 10 '25 14:12 tholeb

Please troubleshoot your situation via the community help forum: https://help.nextcloud.com

When you do so, make sure to fill out the entire support template there, including when the problem started.

P.S. Your several maintenance releases behind within the v31 tree.

joshtrichards avatar Dec 10 '25 21:12 joshtrichards

Hi, I solved it by enabling proxy_buffering on both my NGINX instances.

tholeb avatar Dec 11 '25 08:12 tholeb