Server is speaking HTTP/2 over HTTP
Ce message d’erreur de certbot m’a laissé perplexe… et le renouvellement automatique de mes certificats Let’s Encrypt ne fonctionnait plus! Et cela pour tous les vhosts présents sur le serveur.
Comme j’ai essuyé des erreurs python (request et liburl) récemment, j’ai d’abord cherche de ce coté. Mais rien d’anormal …
Pourtant le message est clair
Server is speaking HTTP/2 over HTTP
Mais des fois que voulez vous, il faut relire chaque mot.
- HTTP : 80
- HTTPS : 443
- HTTP2 = HTTPS
- 80 != 443
Il s’avère que lorsqu’on a (par erreur) mis une directive http2 dans sur le port 80 d’un vhost nginx comme ceci :
[root@webserver ~]# grep -P 'listen(.*)http2' /etc/nginx/sites-enabled/*
listen 80 http2;
La correction est simple, supprimez le http2 sur un port 80.
listen 80;
Il faut noter que le protocole http2 est appliqué à tous les vhosts nginx sur le port 80 même si ce n’est que dans présent dans un seul vhost.
Normal me direz vous, il n’y a qu’un port 80 :)
Si les navigateurs arrivent à gérer le http2 sans chiffrement ( Wikipedia ) , l’utilitaire certbot-auto ça ne lui plait pas. Donc évitez de le fâcher avec un « Server is speaking HTTP/2 over HTTP »