Reverse Proxy PfSense : activer le HTTP/2 dans HAProxy
I. Présentation
Dans ce tutoriel, nous allons voir comment activer le protocole HTTP/2 sur un reverse proxy HAProxy installé sur un serveur PfSense. Même si l'on peut encore utiliser HTTP/1.1 pour son site Web, il est fortement recommandé d'activer la prise en charge de HTTP/2 (disponible depuis plusieurs années) pour bénéficier des nouveautés de cette version, notamment :
- Compression des en-têtes HTTP pour accélérer la vitesse de chargement des pages
- Multiplexage pour effectuer plusieurs échanges en simultanées sur une même connexion TCP
- Priorisation des requêtes
- Server Push : pour une seule requête d'un client, le serveur peut envoyer plusieurs réponses
- Etc.
Il faut savoir que les navigateurs tels que Firefox, Chrome, Safari, etc... prennent en charge le HTTP/2 uniquement avec un certificat SSL. Cela n'est pas étonnant dans le sens où le HTTPS s'est démocratisé depuis plusieurs années maintenant.
Cet article vient en complément de deux autres articles mis en ligne récemment :
- PfSense : reverse proxy HTTPS avec HAProxy et ACME (Let’s Encrypt)
- Pfsense : redirection HTTP vers HTTPS avec HAProxy
Si vous avez mis en place un reverse proxy HTTPS en suivant mon tutoriel, alors vous avez tout intérêt à compléter votre configuration via l'activation du HTTP/2 comme nous allons le voir aujourd'hui. Dans tous les cas, je ne reviendrai pas sur la mise en place du reverse proxy en lui-même.
II. Activer le HTTP/2 dans HAProxy
Connectez-vous à l'interface Pfsense, puis sous "Services", cliquez sur "HAProxy". Vous allez arriver sur l'onglet "Frontend" dans HAProxy : cela tombe bien, car c'est justement la configuration du frontend qu'il va falloir ajuster.
Remarque : cette configuration s'applique uniquement sur les frontends HAProxy qui fonctionne en HTTPS avec gestion du certificat sur le reverse proxy.
Éditez votre frontend et descendez dans la page, jusqu'à la section "SSL Offloading" où vouez allez trouver l'option suivante : "Advanced certificate specific ssl options". Il faut que l'on renseigne cette option avec la valeur suivante :
alpn h2,http/1.1
Grâce à cette valeur, on précise que le reverse proxy prend en charge HTTP/2 ainsi que HTTP/1.1 : de quoi rester compatible sans difficulté avec les machines plus anciennes.
Il ne reste plus qu'à sauvegarder et à recharger HAProxy pour profiter de ce changement dans la configuration ! Si vous avez plusieurs frontends, vous devez répéter l'opération à chaque fois.
Côté serveur Web, activez également HTTP/2 pour qu'il soit actif sur toute la chaîne. Sur un serveur Web Apache, c'est tout simple :
sudo a2enmod http2 sudo systemctl restart apache2
III. Tester que HTTP/2 est bien actif
À l'aide de l'outil "curl", nous pouvons tester facilement notre site Web derrière le reverse proxy pour voir si HTTP/2 est opérationnel. La commande ci-dessous fonctionne très bien avec PowerShell 7 mais aussi sur une machine Linux en installant le paquet "curl". Il suffit de remplacer "www.domaine.com" par votre nom de domaine.
curl -I -k --http2 https://www.domaine.com
Cette commande permet d'afficher l'en-tête HTTP, et au début nous pouvons voir "HTTP/2 200" cela signifie que la page s'est correctement chargée et que nous avons bien communiqué avec le serveur en HTTP/2 ! Parfait !