29 February 2024
New Aya v0.5.0 Soon
Well, now that my surgery is out of the way, I’ve been slowly easing back into my programmin projects, and Aya (my Gemini server, which hosts this site) is first up on my list.
The biggest addition is probably going to be a new alternative CGI specification that I call “Aya UnixSocket CGI” (UCGI or AUCGI). This is quite similar to FastCGI1 in that you start Aya, start separate daemons that handle UCGI requests, and then use Unix domain sockets to communicate between the two. Though this makes things a bit more complicated, the benefit is2 higher overall throughput since a new process isn’t created for each CGI request. The current specification for this is linked below, though keep in mind this isn’t finalized yet until Aya v0.5.0 is out, and is still going to be considered experimental even after that.
Aya UnixSocket CGI Interface v0.1.0 Specifications
I’ll probably write a super small framework of sorts before Aya v0.5.0 is out so that writing UCGI Programs is a bit easier.
I haven’t deployed any real-world test UCGI programs yet, but plan to soon.
The other somewhat big addition is initial support for client SSL certificates. These aren’t encountered much in the HTTP world, but they’re used for client identities in the Gemini world. Support for these comes via a newer version of my RemiGemini library, which Aya is written on top of, and will initially be restricted to CGI and UCGI scripts for v0.5.03. Future versions will let you block off parts of the server tree to specified identities as well, both via the config and with something akin to a .htpasswd file.
Smaller updates to Aya v0.5.0 currently include:
- A cipher-list config option to specify the ciphers used by TLS contexts.
- A disable-tls-v21 config option to disable TLSv1.2 support.
- An accept-hosts config option, both to better handle undesired proxy attempts, and to better handle hostnames behind a NAT.
- An index-files config option to specify which filenames are considered index files, and thus auto-served (e.g. index.gmi).
- Better handling of URLs that are too long for the filesystem to handle.
So yeah, watch my gemlog or my Fediverse account for the announcement.
Footnotes
- 1: This was unintentional. I came up with the idea before I read how FastCGI worked (no, I never used FastCGI before), then was pleasantly surprised to find that I had made something similar.
- 2: I haven’t benchmarked this, but I’d be surprised if spawning individual processes was faster.
- 3: These aren’t passed through CGI/UCGI Parameters yet as of this writing. That’ll be in place before v0.5.0 is released.