this post was submitted on 03 Mar 2025
36 points (92.9% liked)

Selfhosted

43094 readers
1061 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

I ran OpenSpeedTest from my PC to my Raspberry Pi 4B, both connected via LAN to my WiFi router. The left screenshot shows the speedtest via local_ip:3000, and I'm getting the expected 1 Gbps up/down.

The right screenshot shows the speedtest via https://speed.mydomain.com/. I'm confident that the connection from my PC to my home server is routed internally and not through the internet because my lowest ping to the nearest Speedtest server (my own ISP) on speedtest.net is 6ms, and my internet speed is 100 Mbps up/down. So the traffic must be routing internally.

Is there typically such a massive difference between using http://local_ip:3000 and https://speed.mydomain.com/?

Additional context: The speedtest server is running via Docker Compose. I'm using Nginx (native, not Docker) to access these services from outside my network.

top 8 comments
sorted by: hot top controversial new old
[–] [email protected] 7 points 4 hours ago

The port is forwarded from your router to the pi, right? If so, you could test for the router as the bottleneck using the router's WAN side IP address as the target.

This should give you a good data point for comparison. If it's also slow then you can focus on the router performance. Some are slow when doing hairpin NAT.

[–] [email protected] 17 points 7 hours ago

The difference might be HTTP vs HTTPS. On a Pi the extra CPU load to properly encrypt the HTTPS stream is probably significant.

[–] [email protected] 9 points 6 hours ago* (last edited 6 hours ago) (1 children)

So you have local DNS set up?
If you ping (or dig) speed.mydomain.local, does it resolve the same address as local_ip?
Considering you are accessing local_ip:3000 and the domain on port 443, there is clearly a firewall somewhere redirecting packets or a reverse proxy on the domain but not on local_ip:3000

Follow the port chain, forwarding, proxying etc. One of those will be bottlenecking. Then figure out why

Edit:
Just because your ISP speed is 100mbps and you are seeing 500mbps, doesn't mean the connection isn't hairpinning through your router via it's public IP (as in, the traffic never leaves your router, but still goes through it)

[–] [email protected] 2 points 6 hours ago

yeah, traceroute might hint at that, if this is what is going on.

[–] Darkassassin07 21 points 10 hours ago* (last edited 9 hours ago) (1 children)

Looking at openspeedtests github page, this immediately sticks out to me:

Warning! If you run it behind a Reverse Proxy, you should increase the post-body content length to 35 megabytes.

Follow our NGINX config

/edit;

Decided to spin up this container and play with it a bit myself.

I just used my standard nginx proxy config which enables websockets and https, but I didn't explicitly set the max_body_size like their example does. I don't really notice a difference in speed, switching between the proxy and a direct connection.

So, That may be a bit of a red herring.

[–] [email protected] 2 points 6 hours ago

Also, proxy_buffering

[–] [email protected] 6 points 8 hours ago

Is there typically such a massive difference between using http://local_ip:3000 and https://speed.mydomain.com/?

Only if they resolve to different addresses.

[–] [email protected] 10 points 9 hours ago

NAT can be expensive. Its relaying through your gateway.