btw I really appreciate the design of you site, it's simple, clean , and beautiful. Timeless.
[0] https://www2.fossil-scm.org/home/doc/trunk/www/index.wiki
Those could however be offloaded onto a threadpool, to avoid the blocking to affect any other requests that are processed by the same Nginx worker. Nginx however only partially does that - whole file read and write operations are offloaded a whole bunch of other IO (stat, open, close) are executed on the main thread. I guess due to implementation challenges - one can’t just make one operation async but also needs to make each operation that utilizes those methods async.
./src/os/unix/ngx_file_aio_read.c
API's doc https://man7.org/linux/man-pages/man3/aio_read.3.html
Even though the source is there don't mean it's compiled or used though. Might or might not be. No idea about the details.
Single threaded HTTP servers have their own issues. If the bottleneck is the storage then lack of async open()/stat() and some other calls is problematic. We feel that serving hundreds of millions of files (long tail content) from slow storage using nginx. For that reason you can configure nginx to spawn multiple processes.