iOS app can’t play videos (Nextcloud 32, Docker + Nginx reverse proxy) while web UI plays fine

Here’s a ready-to-post forum message (English), with everything trimmed to the essentials and no secrets:


iOS app can’t play videos (Nextcloud 32, Docker + Nginx reverse proxy) while web UI plays fine

Environment

  • Nextcloud 32.0.0 in Docker

    • App container: custom image based on nextcloud:32-apache with ffmpeg installed (/usr/bin/ffmpeg)

    • Other containers: MariaDB 10.11, Redis 7.2, Nginx 1.27 reverse proxy

  • External storage: Local mounts (/SSD2TB, /SSD128) via “External storages”

  • iOS app: Nextcloud iOS 7.1.7 (on latest iOS)

  • Domain: reverse proxy on HTTPS (valid cert), HSTS enabled

Symptoms

  • In the iOS app, tapping any .mp4 or .mov starts to load but never plays. Sometimes the app suggests opening with an external player (e.g. VLC).

  • The web interface (desktop browser) plays the same files smoothly.

  • Thumbnails/previews are generated (we use previewgenerator and ffmpeg movie previews).

What works / doesn’t

  • :white_check_mark: Desktop browsers via the same domain: video playback OK.

  • :white_check_mark: Direct file access via Web UI (player based on Video.js): OK.

  • :cross_mark: Nextcloud iOS app streaming the same file: fails to start.

  • The app does call POST /ocs/v2.php/apps/dav/api/v1/direct and receives a direct link like /remote.php/direct/..., but playback still fails.

Reverse proxy (Nginx) details

  • Passing Range and disabling buffering for streaming:

    • proxy_http_version 1.1;

    • proxy_request_buffering off;

    • proxy_buffering off;

    • add_header Accept-Ranges bytes;

    • proxy_set_header Range $http_range;

  • HTTP/2 is currently off for testing (HTTP/1.1 only).

  • HSTS on.

  • No auth/cookie stripping; headers forwarded normally.

Server logs (excerpt / patterns)

  • iOS app shows lots of PROPFIND on /remote.php/dav/files/<user>/... and POST /ocs/v2.php/apps/dav/api/v1/direct (200).

  • When attempting playback from the iOS app there is no obvious 206/Range activity in access logs (or it’s not getting through?).

  • No PHP errors during video access. Redis/MariaDB healthy.

What we already tried

  • Reinstalled the iOS app and logged in again.

  • Tested with app password as well as normal login.

  • Disabled HTTP/2 at the proxy, ensured Range support (Accept-Ranges: bytes, Range forwarded).

  • Confirmed ffmpeg present in the app container and previews generate for videos.

  • Verified that files_videoplayer app is not required on NC 32 (the legacy app isn’t in the app store anymore).

Questions

  1. Are there any known issues with Nextcloud iOS 7.1.7 streaming videos from /remote.php/direct/... behind an Nginx reverse proxy?

  2. Is there a recommended Nginx snippet for video streaming specifically for the iOS app (beyond forwarding Range and disabling buffering)?

  3. Should we expect 206 Partial Content from the app’s requests, and if so, is there anything else we must set so the app actually requests/receives 206?

  4. Any debug steps on iOS (client logs, toggles) to see why the app refuses to start playback while browsers work?

  5. Could this be related to WebDAV vs. direct endpoint behavior in the iOS app, and is there a config switch to force one path?

Happy to provide a sanitized Nginx location block and full request/response headers from a test file if needed. Thanks!

Am I on my own here?