Skip to content

Inaccurate upload speeds: these settings work on everything but iPad OS and iOS when using Wi-Fi #28

Description

@dimepues

Hi all,

I'm having success on all platforms but iOS and iPad OS when using Wi-Fi 😋 and wanted to share my setup / settings. Enjoy!

  • When testing with Windows / MacOS / Linux, I get accurate numbers (verified with my networking devices).
  • When testing on iOS (iPhone 15 Pro Max) and iPad OS (iPad Pro M4) via either Safari or Edge (both Web Kit-based), I still get wonky upload speeds.

Numbers I'm seeing on Wi-Fi 6E 6ghz:

  • Windows: accurate
  • iOS (Edge/Safari): inflated upload
  • iPad OS (Edge/Safari): inflated upload

Numbers I'm seeing on Wi-Fi 6 5ghz:

  • Windows: accurate
  • iOS (Edge/Safari): inflated upload
  • iPad OS (Edge/Safari): inflated upload
  • macOS (Edge/Safari): accurate
  • Debian Bookworm (Firefox ESR 115.4): accurate
  • openSUSE Tumbleweed (Firefox 128.0.3): accurate
  • ubuntu 24.04 (Firefox 129.0.1): accurate

My Setup:

  • Docker host running ubuntu 24.04 cloud image
  • Docker host is connected via 100g switch
  • Wi-Fi 6E APs are connected via 2.5Gb to a 10Gb switch
  • Wi-Fi clients and servers are on separate VLANs but I have Layer-3 routing so the only bottlenecks are my dreams 💖
  • Portainer-based management for stacks (Docker Compose with bells and whistles)
  • Centralized Nginx proxy stack for all my workloads
  • Dedicated OpenSpeedTest stack

Docker Compose: Nginx

version: '3.8'

networks:
  apps-general:  
    external: true
  paperless-ngx:
    external: true

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: unless-stopped
    ports:
      - '80:80'
    volumes:
      - /home/ubuntu/nginx-configs/apps.conf:/etc/nginx/conf.d/apps.conf
    networks:
      - apps-general

Docker Compose: OpenSpeedTest

version: '3.3'

services:
  speedtest:
    image: openspeedtest/latest
    restart: unless-stopped
    container_name: openspeedtest

    networks:
      - apps-general

networks:
  apps-general:
    external: true

OpenSpeedTest Portion of apps.conf

Partially sourced from this configuration:

server {
    listen 80;
    server_name speed.apps.home.domain.com;

    location / {
        # Proxy pass directive to route requests to the OpenSpeedTest container
        proxy_pass http://openspeedtest:3000/;
        proxy_http_version 1.1; # Ensure HTTP/1.1 is used for this location
        # Standard headers for proxying
        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;

        # Additional headers to ensure correct handling
        add_header 'Access-Control-Allow-Origin' "*" always;
        add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header Cache-Control 'no-store, no-cache, max-age=0, no-transform';
        add_header Last-Modified $date_gmt;
        if_modified_since off;
        expires off;
        etag off;

        # Handle OPTIONS requests
        if ($request_method = OPTIONS ) {
            add_header 'Access-Control-Allow-Credentials' "true";
            add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With' always;
            add_header 'Access-Control-Allow-Origin' "$http_origin" always;
            add_header 'Access-Control-Allow-Methods' "GET, POST, OPTIONS" always;
            return 200;
        }
    }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions