Chronique de l'AdminSys - 2 : Nginx et HTTP/2 (EDIT 11/12/2015)

Aujourd'hui je viens de passer une petite heure sur Nginx pour activer correctement HTTP/2.

Déjà avant de les perdre, voici la liste des références qui m'ont aidé dans la quête du chargement rapide :

Précaution pour pas tout péter

Mettre en place le fichier /etc/apt/preferences pour ‘éviter’ le cassage de dépendances, j'insiste sur éviter, on est jamais sur de rien, faites bien vos sauvegardes au cas ou vous deviez réinstaller votre machine, un cassage de dépendance peut vite devenir impossible à réparer.

Package: *  
Pin: release o=Debian,a=jessie-updates,l=Debian  
Pin-Priority: 990

Package: *  
Pin: release o=Debian,a=jessie,l=Debian-Security  
Pin-Priority: 990

Package: *  
Pin: release o=Debian,a=jessie,l=Debian  
Pin-Priority: 990  

Ensuite ajouter au /etc/apt/sources.list :

deb http://nginx.org/packages/mainline/debian/ jessie  nginx  
deb-src http://nginx.org/packages/mainline/debian/ jessie  nginx  

Maintenant les dépôts sont capables de charger la mainline de nginx qui bénéficie depuis le 22 septembre 2015 du module HTTP/2

Faites un backup de votre dossier de conf nginx, ça peut servir…

apt-get update  
apt-get upgrade  
# maintenant vous devriez avoir nginx à jours

Pour rappel, pour pouvoir utiliser HTTP/2 il faut que vous ayez https d'activé, c'est purement arbitraire, c'est pour la sécurité, c'est pas moi qui ai choisi, on y peut rien. Donc si vous avez pas https --> Mon article sur Let's Encrypt

Maintenant il faut activer http2 dans vos vhosts, remplacez donc les directives

listen 443 ssl;  
listen [::]:443 ssl;  

par

listen 443 ssl http2;  
listen [::]:443 ssl http2;  

Ensuite il faut savoir, et c'est sur ça que j'ai le plus galéré, HTTP/2 n'est pas compatible avec tous les Ciphers, encore une fois c'est arbitraire et pour des raisons de sécurité de chiffrement. il vous faudra donc utilisez les directives suivantes :

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
ssl_ciphers EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA;  
ssl_ecdh_curve secp384r1;  
# merci Pepi Zawodsky https://lists.cert.at/pipermail/ach/2015-November/002009.html

Voila, maintenant c'est OK normalement, il ne vous reste plus qu'a actualiser la configuration :

nginx -s reload  

Petit tricks pour Nginx

Si un jour vous avez besoin d'aide pour votre config nginx et que vous allez sur leur IRC, ils vont avoir besoin de votre config complète.

nginx -T > output.conf vous permettra de fournir un fichier simplement.

Nota Bene

Le package que fourni Nginx pour son pre-built de la mainline ne s'intègre pas aussi bien à Debian que celui de la distribution de Debian.

Si vous voulez continuer à utiliser service avec systemd il va falloir vous en occuper vous-même (je pense plancher dessus d'ici peu)

en attendant il vous faudra utiliser :

  • nginx -s reload pour recharger la configuration
  • nginx -s stop pour le fermer
  • nginx pour le démarrer

Image de une provenant de Hacker News

Edit 11/12/2015

si vous ne pouviez plus utiliser service nginx ...

systemctp enable nginx  
systemctl umask nginx  

devrait résoudre le problème

Purexo

Developpeur et AdminSys sur Antarka

IN DA FACKIN KLOOD https://purexo.eu/