I have been experiencing problems with the f-droid.org webserver for a long time now, in particular icons not loading in the app or only after a long time.
I did a little test, requesting only one little icon in my webbrowser, screenshot:
Just creating the initial connection took more than 15 seconds. Sending the data itself is lightning fast, 4ms.
Sometimes it takes so long that the browser just times out, but download speeds are good once a request is being served.
This looks like there are not enough request workers to handle all connections. Many users may be downloading large files through their slow internet connections, keeping workers occupied and everyone else must just wait in line to get served.
From Apache docs:
[MaxRequestWorkers](https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers)directive sets the limit on the number of simultaneous requests that will be served. Any connection attempts over the
MaxRequestWorkerslimit will normally be queued, up to a number based on the
ListenBacklogdirective. Once a child process is freed at the end of a different request, the connection will then be serviced.
Perhaps you have already tuned this and there is some DDoS going on? Monitoring the server with mod_status may provide some clues.
Then there is Cache-Control: immutable which can make a big difference in the number of connections the server needs to process. The icons are just static content so why not make better use of client caching? This directive may also pave the way for mirroring with caching reverse proxies.