Title: Reduce httpd web server bandwidth usage by serving compressed files Author: Solène Date: 22 April 2022 Tags: openbsd selfhosting nocloud Description: The OpenBSD httpd web server received a new feature allowing to serve precompressed files to save bandwidth. # Introduction When reaching a website, most web browsers will send a header (some metadata about the requestion) informing the web server that you supported compressed content. In OpenBSD 7.1, the httpd web server received a new feature allowing it to serves a pre-compressed file of a requested file if the web browser supports compression. The benefits are a bandwidth usage reduced by 2x to 10x depending on the file content, this is particularly interesting for people who self-host and for high traffic websites. # Configuration In your httpd.conf, in a server block add the "gzip-static" keyword, save the file and reload the httpd service. A simple server block would look like this: ```httpd.conf configuration file server "perso.pw" { root "/htdocs/solene" listen on * port 80 gzip-static } ``` # Creating the files In addition to this change, I added a new flag to the gzip command to easily compress files while keeping the original files. Run "gzip -k" on the files you want to serve compressed when the clients support the feature. It's best to compress text files, such as HTML, JS or CSS for the most commons. Compressing binary files like archives, pictures, audio or videos files won't provide any benefit. # How does it work? When the client connects to the httpd server requesting "foobar.html", if gzip-static is used for this location/server, httpd will look for a file named "foobar.html.gz" that is not older than "foobar.html". When found, "foobar.html.gz" is transparently transferred to the client requesting "foobar.html". Take care to regenerate the gz files when you update the original files, remember that the gz files must be newer to be used. # Conclusion This is for me a major milestone for using httpd in self-hosting and with static websites. We battle tested this change with the webzine server often hitting big news websites leading to many people visiting the website in a short time span, this drastically reduced the bandwidth usage of the server, allowing it to support more clients per second. |