sbw : cgi pour économiser la bande passante
⚠ AVERTISSEMENT : cet outil est obsolète puisque désormais, httpd intègre le support de gzip par défaut.
sbw est un petit outil en C dont l'objectif est de réduire l'utilisation de bande passante en servant lorsque c'est possible les fichiers gzippés. En bonus, il permet de définir une page 404 personnalisée. Il est censé s'utiliser avec OpenBSD et le serveur httpd.
Il profite du support d'unveil et pledge ("stdio, rpath") pour garantir davantage de sécurité.
Puisqu'il est écrit en C, il ne nécessite aucune dépendance.
Lorsqu'une personne demande la page domain.tld/index.html, sbw regarde si index.html.gz est disponible et envoie ce fichier à la place. De plus, il indique au navigateur le hash du fichier pour qu'il gère mieux la mise en cache (header ETag).
Configuration
Activez et démarrez slowcgi(8).
# rcctl enable slowcgi # rcctl start slowcgi
Configurez httpd(8) pour servir les types de fichiers désirés avec sbw :
# cat /etc/httpd.conf [...] location "/*" { include "/etc/httpd.d/sbw.conf" } [...] # cat /etc/httpd.d/sbw.conf root "/cgi-bin/sbw.cgi" fastcgi param realroot "/htdocs/domain.tld/" fastcgi param cachecontrol "1814400" fastcgi param file404 "/_404.html"
Modifiez les paramètres selon vos besoins :
- realroot: Emplacement où est stocké votre site web dans le chroot de httpd.
- cachecontrol (facultatif): Combien de temps le fichier doit être gardé en cache. (Cache-Control header).
- file404 (facultatif): Chemin vers la page 404 personnalisée.
Installez sbw.cgi:
# ftp https://si3t.ch/code/sbwcgi.tgz # tar xvzf sbwcgi.tgz # cd sbwcgi #edit config.h if any # make # install -o www -g bin -m 0550 sbw.cgi /var/www/cgi-bin/sbw.cgi
Compressez les fichiers que vous voulez servir gzippés :
$ gzip -9 < index.html > index.html.gz
Rechargez httpd puis testez
# rcctl restart httpd
Voir aussi:
FAQ
- Pourquoi ne pas gzippper à la volée ? : Pour préserver le CPU du serveur.
BUGS
Peut-être. Merci de m'en faire part.
sbw : save bandwidth cgi for httpd
sbw is a C tool to save a web server bandwidth. Used with OpenBSD httpd, you can enable gzip compression and set a custom 404 page.
It is unveiled and pledged ("stdio, rpath").
When a page is requested, it tries to serve the gzipped file if it is present : if someone access to domain.tld/index.html, sbw try to return index.html.gz. It fills the ETag header to make sure the browser handle cache properly.
Setup
Enable and start slowcgi(8).
# rcctl enable slowcgi # rcctl start slowcgi
Edit httpd(8) configuration for desired file extension :
# cat /etc/httpd.conf [...] location "/*" { include "/etc/httpd.d/sbw.conf" } [...] # cat /etc/httpd.d/sbw.conf root "/cgi-bin/sbw.cgi" fastcgi param realroot "/htdocs/domain.tld/" fastcgi param cachecontrol "1814400" fastcgi param file404 "/_404.html"
Edit parameters to suit your needs :
- realroot: where your website is stored in the chroot.
- cachecontrol (optional): How long files should be kept in cache (Cache-Control header).
- file404 (optional): Your custom 404 page.
Install sbw.cgi:
# ftp https://si3t.ch/code/sbwcgi.tgz # tar xvzf sbwcgi.tgz # cd sbwcgi #edit config.h if any # make # install -o www -g bin -m 0550 sbw.cgi /var/www/cgi-bin/sbw.cgi
Gzip files you want to serve gzipped:
$ gzip -9 < index.html > index.html.gz
Reload httpd and enjoy
# rcctl restart httpd
FAQ
- Why don't you gzip on the fly ? To spare server CPU. Of course, instead of checking for gz file, one might gzip to stdout at each request.
BUGS
Maybe, please tell me.