Ubuntu – Activer HTTP/2 avec Nginx
Le support du protocole HTTP2 dans Nginx date de la version 1.9.5 (sortie en septembre 2015) or sur les versions d’Ubuntu antérieures à la 16.04, les versions de Nginx disponibles dans les paquets officiels sont plus anciennes. Nous allons voir dans cet article comment installer manuellement la dernière version de Nginx sur les versions 14.04, 15.04, 15.10 et 16.04 d’Ubuntu (non disponible pour les architectures ARM).
Nginx distingue deux types de versions : stable et mainline. Les paquets officiels d’Ubuntu contiennent uniquement des versions de la branche stable où seuls les bugs majeurs sont corrigés. Nginx recommande d’utiliser les versions de la branche mainline qui introduisent les nouvelles fonctionnalités et qui contiennent la totalité des bugs corrigés (mineurs et majeurs). Nous allons donc nous intéresser ici à la dernière version de la branche mainline.
Ubuntu 14.04/15.04 (Trusty/Vivid)
1 – Mise à jour d’OpenSSL
Nginx doit être compilé avec OpenSSL 1.0.2 pour que le protocole HTTP/2 soit pris en compte par les navigateurs. Cependant, avec Ubuntu 14.04 et 15.04, la dernière version disponible d’OpenSSL est la 1.0.1f.
La version 1.0.2 inclut la spécification RFC7301 ou le support du protocole ALPN (Application-Layer Protocol Negotiation) qui est requis pour pouvoir accepter des négociations HTTP/2.
La version 1.0.1 ne permet d’utiliser que le protocole NPN (Next Protocol Negotiation) qui est maintenant déprécié.
-
Installez tout d’abord l’outil GCC pour pouvoir compiler OpenSSL :
sudo apt-get install gcc
-
Téléchargez la dernière version d’OpenSSL :
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
-
Récupérez la signature SHA1 du source afin de vérifier l’intégrité de l’archive :
wget http://www.openssl.org/source/openssl-1.0.2g.tar.gz.sha1
-
Comparez les deux signatures (celles-ci doivent être identiques) :
sha1sum openssl-1.0.2g.tar.gz ; cat openssl-1.0.2g.tar.gz.sha1
-
Décompressez l’archive téléchargée :
tar -zxf openssl-1.0.2g.tar.gz
-
Installez la dernière version d’OpenSSL :
cd openssl-1.0.2g ./config --prefix=/usr/ make sudo make install
-
Vérifiez la version d’OpenSSL :
openssl version
La commande doit afficher sur la sortie standard :
OpenSSL 1.0.2g 1 Mar 2016
2 – Installation de Nginx (branche mainline)
-
Si Nginx était installé sur votre système, il est nécessaire de supprimer le paquet nginx-common :
sudo apt-get remove nginx-common
-
Créez le fichier /etc/apt/sources.list.d/nginx.list et ajoutez les lignes suivantes :
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
-
Ajoutez la clé d’authentification du paquet nginx :
wget -q -O- http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
-
Installez la dernière version de Nginx :
sudo apt-get update sudo apt-get install nginx
-
Vérifiez la présence du module –with-http_v2_module en tapant la commande
nginx -V
:
3 – Configuration de Nginx
La configuration diffère quelque peu des versions de la branche stable et de la branche mainline. En effet, les configurations liées à Nginx des versions de la branche stable sont placées dans le dossier /etc/nginx/site-available et sont chargées dans le dossier /etc/nginx/site-enabled (liées par des liens symboliques). En revanche, les configurations liées à Nginx des versions de la branche mainline chargent uniquement les fichiers dont l’extension est .conf dans le dossier /etc/nginx/conf.d. Deux possibilités s’offrent à vous :
- la première consiste tout simplement à déplacer les configurations du dossier /etc/nginx/site-available vers le dossier /etc/nginx/conf.d et d’ajouter l’extension .conf à chacune de vos configurations
-
la deuxième consiste à remplacer directement dans la configuration de Nginx l’emplacement où seront chargées les configurations de vos sites web (en partant du principe que vous gardez la mécanique des liens symboliques du dossier /etc/nginx/site-enabled pointant vers le dossier /etc/nginx/site-available) :
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Les processus Nginx des versions de la branche mainline sont lancés sous l’utilisateur nginx. Cependant Ubuntu utilise l’utilisateur www-data dans les versions de la branche stable. Cette différence d’utilisateur peut engendrer des problèmes de permissions lors de l’accès à vos ressources web. Il peut être nécessaire de modifier l’utilisateur dans le fichier de configuration /etc/nginx/nginx.conf de Nginx :
#user nginx;
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Redémarrez Nginx :
sudo service restart nginx
4 – Configuration des Vhosts
-
Ajoutez la directive http2 dans le fichier de configuration de votre virtual host :
server { listen 80; listen [::]:80; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.mondomaine.fr; root /usr/share/nginx/html; index index.html index.htm; ... }
-
Rechargez la configuration Nginx :
sudo service reload nginx
Ubuntu 15.10 (Wily)
1 – Installation de Nginx (branche mainline)
-
Si Nginx était installé sur votre système, il est nécessaire de supprimer le paquet nginx-common :
sudo apt-get remove nginx-common
-
Créez le fichier /etc/apt/sources.list.d/nginx.list et ajoutez les lignes suivantes :
deb http://nginx.org/packages/mainline/ubuntu/ wily nginx deb-src http://nginx.org/packages/mainline/ubuntu/ wily nginx
-
Ajoutez la clé d’authentification du paquet nginx :
wget -q -O- http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
-
Installez la dernière version de Nginx :
sudo apt-get update sudo apt-get install nginx
-
Vérifiez la présence du module –with-http_v2_module en tapant la commande
nginx -V
:
2 – Configuration de Nginx
La configuration diffère quelque peu des versions de la branche stable et de la branche mainline. En effet, les configurations liées à Nginx des versions de la branche stable sont placées dans le dossier /etc/nginx/site-available et sont chargées dans le dossier /etc/nginx/site-enabled (liées par des liens symboliques). En revanche, les configurations liées à Nginx des versions de la branche mainline chargent uniquement les fichiers dont l’extension est .conf dans le dossier /etc/nginx/conf.d. Deux possibilités s’offrent à vous :
- la première consiste tout simplement à déplacer les configurations du dossier /etc/nginx/site-available vers le dossier /etc/nginx/conf.d et d’ajouter l’extension .conf à chacune de vos configurations
-
la deuxième consiste à remplacer directement dans la configuration de Nginx l’emplacement où seront chargées les configurations de vos sites web (en partant du principe que vous gardez la mécanique des liens symboliques du dossier /etc/nginx/site-enabled pointant vers le dossier /etc/nginx/site-available) :
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Les processus Nginx des versions de la branche mainline sont lancés sous l’utilisateur nginx. Cependant Ubuntu utilise l’utilisateur www-data dans les versions de la branche stable. Cette différence d’utilisateur peut engendrer des problèmes de permissions lors de l’accès à vos ressources web. Il peut être nécessaire de modifier l’utilisateur dans le fichier de configuration /etc/nginx/nginx.conf de Nginx :
#user nginx;
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Redémarrez Nginx :
sudo service restart nginx
3 – Configuration des Vhosts
-
Ajoutez la directive http2 dans le fichier de configuration de votre virtual host :
server { listen 80; listen [::]:80; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.mondomaine.fr; root /usr/share/nginx/html; index index.html index.htm; ... }
-
Rechargez la configuration Nginx :
sudo service reload nginx
Ubuntu 16.04 (Xenial) et versions supérieures
Ubuntu 16.04 dispose de la version 1.9.11 de Nginx dans ses paquets officiels et celle-ci supporte le HTTP/2. Il est simplement nécessaire de l’activer dans votre virtual host.
-
Ajoutez la directive http2 dans le fichier de configuration de votre virtual host :
server { listen 80; listen [::]:80; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.mondomaine.fr; root /usr/share/nginx/html; index index.html index.htm; ... }
-
Rechargez la configuration Nginx :
sudo service reload nginx
Laisser un commentaire
Rejoindre la discussion?N’hésitez pas à contribuer !