NextCloud multiple file download problem

Lastly, I had a problem with Nginx after an update and the problem was solved. My current problem is that when I try to download multiple files or folders, the “download.html” file tries to download and gives a “site could not be reached” error. when I download a single file, it downloads without a problem. I have played with the configurations but no improvement.

Required Information

  • DietPi version
G_DIETPI_VERSION_CORE=9
G_DIETPI_VERSION_SUB=2
G_DIETPI_VERSION_RC=1
G_GITBRANCH='master'
G_GITOWNER='MichaIng'
  • Distro version
bookworm 0
  • Kernel version |
Linux DietPi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
  • Architecture |
arm64
  • SBC model |
RPi 4 Model B (aarch64)

Additional Information (if applicable)

  • Software title | (EG: Nextcloud)

I think I have out of date Nginx configuration.


# Based on: https://github.com/nextcloud/documentation/blob/05b7165998ee316a0ce3449cf66e0182c8bec644/admin_manual/installation/nginx-subdir.conf.sample

# Redirect webfinger and nodeinfo requests to Nextcloud endpoint
location /.well-known/webfinger { return 301 /nextcloud/index.php$request_uri; }
location /.well-known/nodeinfo  { return 301 /nextcloud/index.php$request_uri; }

location ^~ /nextcloud {

	# Omit Nginx version on error response
	server_tokens off;

	# Set max upload size
	client_max_body_size 1048576M;
	fastcgi_buffers 64 4K;

	# Enable gzip but do not remove ETag headers
	gzip on;
	gzip_vary on;
	gzip_comp_level 4;
	gzip_min_length 256;
	gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
	gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

	# HTTP response headers borrowed from Nextcloud `.htaccess`
	add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
	add_header Referrer-Policy "no-referrer" always;
	add_header X-Content-Type-Options "nosniff" always;
	add_header X-Download-Options "noopen" always;
	add_header X-Frame-Options "SAMEORIGIN" always;
	add_header X-Permitted-Cross-Domain-Policies "none" always;
	add_header X-Robots-Tag "noindex, nofollow" always;
	add_header X-XSS-Protection "1; mode=block" always;

	# Remove X-Powered-By, which is an information leak
	fastcgi_hide_header X-Powered-By;

	# Specify how to handle directories -- specifying `/nextcloud/index.php$request_uri`
	# here as the fallback means that Nginx always exhibits the desired behaviour
	# when a client requests a path that corresponds to a directory that exists
	# on the server. In particular, if that directory contains an index.php file,
	# that file is correctly served; if it doesn't, then the request is passed to
	# the front-end controller. This consistent behaviour means that we don't need
	# to specify custom rules for certain paths (e.g. images and other assets,
	# `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
	# `try_files $uri $uri/ /nextcloud/index.php$request_uri`
	# always provides the desired behaviour.
	index index.php index.html /nextcloud/index.php$request_uri;

	# Rule borrowed from `.htaccess` to handle Microsoft DAV clients
	location = /nextcloud {
		if ( $http_user_agent ~ ^DavClnt ) {
			return 302 /nextcloud/remote.php/webdav/$is_args$args;
		}
	}

	# Rules borrowed from `.htaccess` to hide certain paths from clients
	location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
	location ~ ^/nextcloud/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }

	# Ensure this block, which passes PHP files to the PHP process, is above the blocks
	# which handle static assets (as seen below). If this block is not declared first,
	# then Nginx will encounter an infinite rewriting loop when it prepends
	# `/nextcloud/index.php` to the URI, resulting in a HTTP 500 error response.
	location ~ \.php(?:$|/) {
		fastcgi_split_path_info ^(.+?\.php)(/.*|)$;
		set $path_info $fastcgi_path_info;
		try_files $fastcgi_script_name =404;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_param HTTPS $https;
		fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
		fastcgi_param front_controller_active true; # Enable pretty URLs without /index.php/
		fastcgi_pass php;
		fastcgi_intercept_errors on;
		fastcgi_request_buffering off;
		fastcgi_max_temp_file_size 0; # Allow downloads > 1 GiB: https://github.com/nextcloud/documentation/pull/7979
	}

	include mime.types;
	types {
		text/javascript js mjs;
		application/wasm wasm;
	}

	location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
		try_files $uri /nextcloud/index.php$request_uri;
		# HTTP response headers borrowed from Nextcloud `.htaccess`
		add_header Cache-Control "public, max-age=15778463$asset_immutable";
		#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
		add_header Referrer-Policy "no-referrer" always;
		add_header X-Content-Type-Options "nosniff" always;
		add_header X-Download-Options "noopen" always;
		add_header X-Frame-Options "SAMEORIGIN" always;
		add_header X-Permitted-Cross-Domain-Policies "none" always;
		add_header X-Robots-Tag "noindex, nofollow" always;
		add_header X-XSS-Protection "1; mode=block" always;
		access_log off; # Optional: Don't log access to assets
	}

	location ~ \.woff2?$ {
		try_files $uri /nextcloud/index.php$request_uri;
		expires 7d; # Cache-Control policy borrowed from `.htaccess`
		access_log off; # Optional: Don't log access to assets
	}

	# Rule borrowed from `.htaccess`
	location /nextcloud/remote {
		return 301 /nextcloud/remote.php$request_uri;
	}

	location /nextcloud {
		try_files $uri $uri/ /nextcloud/index.php$request_uri;
	}
}

Why do you think that?

Theoretically you could get the current NC/nginx config file from GitHub at https://raw.githubusercontent.com/MichaIng/DietPi/master/.conf/dps_114/nginx.nextcloud.conf

1 Like

The reason I thought of this is that I can download individual files but have problems downloading multiple files. Also, when I click on the “files” icon, this is the URL it gives me, is it normal for it to repeat “files” in URL twice?

image

What else could the problem be related to?

yes
grafik

1 Like

When I try to download a folder or multiple files, the download file is downloaded.

ping @MichaIng I know you are using NC as well. Maybe you can have a look

Yes this is not intended, it should ceate a zip which then get’s downloaded. Do you have php module zip installed? It should also give you a warning in the admin settings, if not.

There is no warning in the dashboard about the zip module. Should I also check from the console?

might be best

zip module appears in the list
php -m


[PHP Modules]
apcu
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
igbinary
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
random
readline
redis
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

The Nginx config is up-to-date, as it was updated during DietPi v9.1 update. I did not test downloading multiple files with Nginx recently, just with Apache.

I checked the code, it should be download.php without HTML: server/apps/files/ajax/download.php at 49cd6670026dea4880d016b3515342c2aa274600 · nextcloud/server · GitHub
The extension was likely added by Nginx as the MIME type was unexpected and I have the suspicion that the reason is a wrong URL path and hence non-existing file, so that it was handled by the PHP backend.

What is the URL of this download.php.html? The browser development tools have a network tab as well, where you can see all requests done, and the browser console there likely shows some related error(s) as well.

The files/files URL is intended, indeed, I see this with Apache as well.

1 Like

I found the following link in the meta information in the downloaded file.

https://cloud.*******.com/nextcloud/apps/files/ajax/download.php?dir=%2F&files=%5B%2212%20Mart%20-%2018%20Mart%22%5D&downloadStartSecret=vxyjwpu6lqb

I don’t see any error code in the Network tab of the development tools. But the console tab shows some bugs:

Also SVG icons don’t look transparent as they should. Could this be related to this problem?

I feel sad that I still have not found a solution to this issue.