Dans cette vidéo nous allons découvrir Caddy qui est un serveur web open source écrit en go proposant la mise en place de certificat SSL automatiquement.
Avantage par rapport à Nginx / Apache
Cela fait un moment que j'utilise nginx pour mettre en place mes serveurs web mais Caddy vient apporter des points intéréssants sur certains aspects problématiques.
- Nginx et Apache dispose d'une configuration qui devient rapidement longue et verbeuse pour des cas simples (reverse proxy, https...). La même configuration ne prend que quelques lignes sur Caddy
- La génération des certificats SSL via let's encrypt est un peu compliqué car il faut configurer le serveur d'une certaine manière pour accepter la vérification du certificat la première fois. Caddy dispose lui d'un système automatisé qui ne nécessite aucune intervention pour la génération des certificats.
- L'ordre de priorité des règles peut parfois être complexe à appréhender sur nginx, Caddy dispose d'un système de route permettant un meilleur contrôle.
- Caddy est extensible à l'aide de modules qui peuvent être écrit en golang (un peu plus simple à prendre en main que du C)
Installation de Caddy
Caddy peut être utilisé sous forme de simple éxécutable (pratique pour une configuration docker ou dans le cas d'un serveur de développement) mais aussi sous forme de service. Dans le cadre d'Ubuntu l'installation de Caddy se fait de manière traditionnelle en l'ajoutant à la liste des dépôt.
Une fois installée le service va démarrer automatiquement et répondra sur le port 80 (HTTP) avec la page d'accueil par défaut. Caddy peut ensuite être configuré à l'aide du fichier Caddyfile
présent dans le dossier /etc/caddy/
Configuration
La configuration se fait très simplement gràce à une série de directives
demo.droapp.com {
reverse_proxy 127.0.0.1:3333
encode gzip
}
Il suffit ensuite de recharger le service systemctl reload caddy
pour que Caddy puisse récupérer le certificat associé au nom de domaine pour supporter le HTTPS. Et voila votre site fonctionne !
Si vous souhaitez distribuer les fichiers du dossier public
sans passer par le reverse proxy vous pouvez utiliser les request matchers qui permettent d'ajouter une condition à certaines directives.
demo.droapp.com {
root * /var/www/demo.droapp.com/public
# On passe par le proxy sinon
reverse_proxy @notStatic 127.0.0.1:3333
encode gzip
# On délivre les fichiers directement
@notStatic not file
file_server
}
# Redirection www. -> .
www.demo.droapp.com {
redir https://nodadonis.droapp.com{uri}
}
L'ordre des directive dans le fichier n'a pas d'importance et est prédéterminé par Caddy.
La documentation montre aussi des cas classiques de configurations.
Les points négatifs
Evidemment tout n'est pas parfait et j'ai rencontré quelques problème (peut être par manque de connaissance donc n'hésitez pas à me corriger).
- Le format des logs en JSON est un peu moins lisible que le format d'nginx (peut être une question d'habitude), bien que plus facilement parsable par des outils tiers. Mais un module existe pour contrebalancer ce problème.
- Il n'y a pas de système anti burst préintégrés (un module tiers existe mais je ne l'ai pas testé)