Nginx est un serveur Web open source robuste, rapide, fiable et dynamique, populaire pour desservir les sites à fort trafic. De plus, il est réputé pour sa facilité de configuration, sa grande évolutivité et sa prise en charge d'une myriade de protocoles.
Parmi les protocoles pris en charge par Nginx se trouve le nouveau protocole HTTP/2 dont le principal avantage par rapport à son prédécesseur HTTP 1.1 est la vitesse de transfert élevée requise pour les sites Web riches en contenu.
Dans ce guide, nous approfondirons l'installation et la configuration d'un serveur Nginx sécurisé avec prise en charge HTTP/2 :
Prérequis
Pour commencer, passons en revue le contrôle de vol et voyons si nous avons ce qui suit
- Une instance de serveur d'Ubuntu 18.04 LTS
- Nginx version 1.9.5 ou supérieure (pour vérifier la version de Nginx, exécutez
nginx -v
), lisez Installer Nginx sur Ubuntu 18.04. - OpenSSL version 1.0.2 ou supérieure (vérifiez la version à l'aide de la version openssl)
- Un utilisateur normal non root avec des privilèges sudo
- Un nom de domaine complet (FQDN) Dans ce cas, nous allons utiliser
crazytechgeek.info
acheté chez GoDaddy.L'enregistrement A du nom de domaine doit pointer vers l'adresse IP du serveur. crazytechgeek.info a été pointé vers 216.200.116.207.
- Un certificat SSL (soit un certificat auto-signé, soit un certificat de Let's encrypt SSL. De même, vous pouvez en acheter un auprès d'un autre fournisseur.
Étape 1 – Activation de la prise en charge HTTP /2.0
Pour commencer, on suppose que vous avez configuré le bloc de serveur Nginx sur
/etc/nginx/sites-available/your_domain
Dans notre cas, le bloc serveur est /etc/nginx/sites-available/crazytechgeek.info
.
À l'aide de votre éditeur de texte préféré, ouvrez le fichier de bloc du serveur et localisez le listen
directive comme indiqué
La première directive indique les connexions IPv6 tandis que la seconde concerne les connexions IPv4
Maintenant, nous allons modifier chaque directive pour inclure un http2
drapeau comme indiqué
Cela va demander à Nginx d'utiliser HTTP/2 sur les navigateurs pris en charge
Enregistrez le fichier de configuration et quittez votre éditeur.
Ensuite, ouvrez /etc/nginx/sites-available/default
fichier et faites les mêmes modifications
Enregistrez et quittez l'éditeur de texte.
Juste pour vous assurer qu'il n'y a pas d'erreurs de syntaxe dans l'un des fichiers Nginx, exécutez la commande ci-dessous
$ sudo nginx -t
Sortie
Étape 2 :Purger les anciens chiffrements non sécurisés
Pour que HTTP/2 fonctionne comme prévu, nous devons éviter d'utiliser des chiffrements anciens et non sécurisés qui figuraient sur la liste noire HTTP/2. Les suites de chiffrement sont des algorithmes cryptographiques qui dictent la façon dont le trafic doit être chiffré.
Si certbot a été utilisé pour obtenir les certificats, alors les chiffrements dans le chemin /etc/letsencrypt/options-ssl-nginx.conf
ne sont pas assez sécurisés pour HTTP/2. Cependant, la modification de ce fichier ne causera que des erreurs et empêchera certbot d'appliquer les mises à jour. Cela signifie que nous devons spécifier notre liste de chiffrements et demander à Nginx d'ignorer le fichier
Ouvrez le fichier de configuration du bloc de serveur de domaine de votre Nginx
$ vim /etc/nginx/sites-available/crazytechgeek.info
Commentez cette ligne
# include /etc/letsencrypt/options-ssl-nginx.conf;
Sous cette ligne, ajoutez la ligne ci-dessous pour définir les chiffrements autorisés
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Enregistrez le fichier et quittez l'éditeur de texte
Si un certificat auto-attribué a été utilisé, ou un certificat tiers, alors ouvrez le fichier
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
Localisez la ligne comme indiqué ci-dessous
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
Modifiez le fichier en conséquence comme indiqué ci-dessous
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Enfin, enregistrez et quittez le fichier de configuration
Vérifiez à nouveau s'il y a des erreurs de configuration Nginx
$ sudo nginx -t
Si tout s'est bien passé, vous devriez voir la sortie ci-dessous comme indiqué précédemment
Redémarrez Nginx
$ sudo systemctl reload nginx
Dans l'étape suivante, nous allons tester si notre serveur peut héberger des pages HTTP/2
Étape 3 - Tester si HTTP/2 est activé
Testons maintenant si HTTP est en cours d'exécution et activé sur notre serveur Web Nginx
Dans votre terminal, exécutez la commande ci-dessous
curl -I -L https://your_domain
Dans notre cas, ce sera
curl -I -L https://crazytechgeek.info
Sortie
Vous pouvez également vérifier HTTP/2 en ouvrant les outils de développement Google en appuyant sur
Ctrl + Shift + I
Ensuite, cliquez sur Network
Tab.
Dans le Protocol
colonne, assurez-vous de trouver l'étiquette h2
Étape 4 :Déploiement de la sécurité de transport HTTP Strict
Enfin, même si nous savons très clairement que notre serveur peut rediriger les requêtes HTTP vers HTTPS, nous souhaitons activer HSTS HTTP Strict Transport Security pour éliminer ces redirections. Si un navigateur tombe sur un en-tête HSTS, il n'essaiera pas de se reconnecter au serveur pendant un certain temps. Le service informatique n'échangera des données que via le protocole HTTPS sécurisé et crypté.
Pour ce faire, ouvrez le fichier de configuration Nginx
$ vim /etc/nginx/nginx.conf
Ajoutez la ligne ci-dessous
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
est défini en secondes
Si votre site a des sous-domaines et que vous souhaitez appliquer HSTS à chacun d'eux, ajoutez le includeSubDomains
drapeau à la fin de la ligne
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Enregistrez et quittez le fichier de configuration.
Comme toujours, vérifiez s'il y a des erreurs
$ sudo nginx -t
Enfin, redémarrez Nginx
$ sudo systemctl restart nginx
Conclusion
À ce stade, votre serveur Nginx sert maintenant des pages HTTP/2.
Vous pouvez également visiter https://tools.keycdn.com/http2-test
pour tester le statut HTTP/2 de votre site comme indiqué
Alternativement, vous pouvez également visiter ce site
https://http2.pro/
Pour des résultats plus détaillés, utilisez
https://www.ssllabs.com/ssltest/