Slow download speed over www, locally its fine

Problem:
NextcloudPi (LXC, installed by script) downloading files (<500 MB) via public internet, connection speed is very poor (transfer rates ~100KBytes/sec, bitrates ~1Mbits/sec, should be around 15 MB/s)
though via LAN within the local network download speed is fine (via public IP/ domain.name and without VPN).

Question:
What am I missing to debug and eliminate the bottleneck of the network(settings)?
I’m grateful for any help and hint!

Setup:
Proxmox running NginxProxyManager, AdguardHome and NextcloudPi as LXC, no firewall running yet, PHP 8.1

  • NginxProxyManager as reverse proxy and load balancer with LetsEncrypt, http/2, force ssl and advanced NextcloudPi settings for getting carddav and caldav syncronized
  • AdguardHome with DNS-over-TLS, with or without forced https
  • NextcloudPi with Redis Server, Apache2
  • Mullvad VPN with DNS server set to AdguardHome localIP
- here is my config.php:
<?php
$CONFIG = array (
  'passwordsalt' => '***********************',
  'secret' => '**************************',
  'trusted_domains' => 
  array (
    0 => 'localhost',
    1 => '<local ipv4 address of my NC instance>'',
    11 => '<dynamic public ipv4 address of my NC instance>'',
    5 => 'nextcloudpi.local',
    8 => 'nextcloudpi.lan',
    14 => 'nextcloudpi.home',
    3 => 'mydomain.tld',
  ),
  'datadirectory' => '/var/www/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '25.0.3.2',
  'overwrite.cli.url' => 'https://mydomain.tld/',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'ncadmin',
  'dbpassword' => '*********************************',
  'installed' => true,
  'instanceid' => '**********',
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '/var/run/redis/redis.sock',
    'port' => 0,
    'timeout' => 0.0,
    'password' => '***************************',
  ),
  'tempdirectory' => '/var/www/nextcloud/data/tmp',
  'trashbin_retention_obligation' => 'auto, 10',
  'mail_smtpmode' => 'sendmail',
  'mail_smtpauthtype' => 'LOGIN',
  'mail_from_address' => 'admin',
  'mail_domain' => 'ownyourbits.com',
  'default_phone_region' => 'DE',
  'preview_max_x' => '2048',
  'preview_max_y' => '2048',
  'preview_max_memory' => 256,
  'jpeg_quality' => '60',
  'overwriteprotocol' => 'https',
  'allow_local_remote_servers' => true,
  'trusted_proxies' => 
  array (
    11 => '127.0.0.1',
    12 => '::1',
    0 => '<local ipv4 address of my Nginx Proxy Manager>',
    14 => '<dynamic public ipv4 address of my NC instance>',
    1 => '<ipv6 address>',
    13 => 'mydomain.tld',
  ),
  'maintenance' => false,
  'loglevel' => '2',
  'log_type' => 'file',
  'has_rebuilt_cache' => true,
  'logfile' => '/var/www/nextcloud/data/nextcloud.log',
  'data-fingerprint' => '******************',
  'theme' => '',
  'enable_previews' => true,
  'enabledPreviewProviders' => 
  array (
    0 => 'OC\\Preview\\Movie',
    1 => 'OC\\Preview\\PNG',
    2 => 'OC\\Preview\\JPEG',
    3 => 'OC\\Preview\\GIF',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\MP3',
    7 => 'OC\\Preview\\MP4',
    8 => 'OC\\Preview\\TXT',
    9 => 'OC\\Preview\\MarkDown',
    10 => 'OC\\Preview\\PDF',
  ),
  'enforce_theme' => '',
);

Hardware:

  • Kernel and CPU: Linux 6.1.10-1-pve on x86_64
  • Processor information: Intel(R) Celeron(R) N5100 @ 1.10GHz, 4 cores
  • Real memory: 1.79 GiB used / 2.58 GiB cached / 7.55 GiB total
  • Virtual memory: 256 KiB used / 7.55 GiB total
  • Local disk space: 24.52 GiB used / 974.95 GiB free / 999.47 GiB total
  • Package updates: All installed packages are up to date

What I tried so far following several net founds:

  • debugging with iperf3, speedtest-cli and attempts to download from public internet
  • Proxmox-kernel upgrade, with and without kernel parameter: “intel_idle.max_cstate=1”
  • increased PHP memory limit to 512 and 1025 MB
  • maximum file size: 10 GB
  • enabled and disabled systemd-resolved
  • nginx reverse proxy: custom locations= /dns-query. Advanced settings: proxy_request_buffering off; client_max_body_size 0; proxy_buffering off;
  • adjusting MTU: using 1492 in the guest instead of 1500 which is set on the host

No one any idea or hint?

as long I get you architecture right

access from “inside client” works well and problem exists only for “outside client”.
The only difference is the connection - you need to analyze if there is some bottleneck between router and RP or internet upload.

You have multiple useless records in trusted_proxies only the RP should be listed there, but this is unlikely the reason for you problems,

'trusted_proxies' => 
  array (
    0 => '<local ipv4 address of my Nginx Proxy Manager>',
),

Thanks for clarification. I cleaned up the trusted proxies as you mentioned.
Edit: No one else got an idea?