Tuto | Installation et configuration de nginx + Loadbalancing

Article publiée le 10 Avril 2017

Durant mon temps libre, j’ai décidé de m’intéresser de prêt à Nginx. Il est vrai que je n’ai jamais eu l’occasion de le mettre en place étant donné que l’intégralité de mes environnements WEB tournent avec Apache. Nginx est un serveur Web spécialement conçu pour encaisser de très forts trafics. Les performances de celui-ci sont nettement supérieures à ceux d’Apache. De plus, Nginx intègre une fonctionnalité de LoadBalancing très puissante. Cependant, l’inconvénient majeur de Nginx est qu’il ne peut gérer nativement du contenu  dynamique (PHP par exemple). Il faudrait pour cela passer par une configuration légèrement plus fastidieuse par rapport à celle d’Apache.

 

1) Installation

Installez Nginx sur une distrib Debian/Ubuntu:

apt-get install nginx

Installez Nginx sur une distrib Centos/RedHat

yum install nginx

(jusque-là rien de compliqué 😉 )

2) Configuration

2.1) Optimisation de la configuration

Dans le fichier nginx.conf, rajoutez les lignes suivantes afin d’optimiser la configuration de votre serveur nginx:

client_body_buffer_size 10k;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;  #modification car la ligne existe déja
send_timeout 10;

2.2) VirtualHost

Vous trouverez ci-dessous des exemples de configuration de VirtualHost Nginx. Pour rappel, un Virtualhost permet de gérer plusieurs sites simultanément avec le même serveur Web. Il permet d’afficher le bon site en fonction du nom de domaine. La configuration des VirtualHost Nginx est assez similaire à celle d’Apache.

Pour créer un VirtualHost sous Debian/Ubuntu il faut créer un fichier de configuration dans le répertoire « /etc/nginx/sites-available » est le remplir avec une configuration similaire à ce qui est indiqué ci-dessous. Ensuite, il ne restera plus qu’à faire un lien symbolique de ce fichier vers le répertoire « site-enabled »

Sous Redhat/Centos créer le répertoire /etc/nginx/vhost.d/ et rajoutez dans le fichier de configuration /etc/nginx.conf la ligne suivante:

include /etc/nginx/vhost.d/*.conf

 

Ci-dessous un VirtualHost prenant en compte un site accessible via HTTP et HTTPS:

 

server {
              listen 80;
              root /var/www/html;
              index index.html index.htm index.php;
              server_name example.com example;
              access_log /var/log/nginx/myexample.access.http.log;
              error_log /var/log/nginx/myexample.error.http.log;
}

server {
        listen 443;
        root /var/www/html;
        index index.html index.htm index.php;
        server_name example.com example;
        access_log /var/log/nginx/myexample.access.https.log;
        error_log /var/log/nginx/myexample.error.https.log;
        ssl on;
        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;
}

Dans le cadre de la configuration du VirtualHost HTTPS, les certificats seront à générer au préalable!

Ci-dessous un VirtualHost permettant de faire un reverse proxy:

 

upstream mysite {
              server localhost:8080;
}
 server {
              server_name mysite.local;
              location / {
              proxy_pass http://mysite.local;
              }
}

 

2.3) Configuration d’un LoadBalancer

Il est également possible de faire du Loadbalancing avec NGINX.

La configuration (VirtualHost) ci-dessous permet de mettre en place un LoadBalancing de type « round robin » (file d’attente gérée de manière circulaire, « chacun son tour »)

upstream vip.local {

server example1.local;
                server example2local;
}
server {
listen 80;
server_name vip.local;
location / {
                proxy_pass http://vip.local;
                }
}

Il est également possible d’assigner un « poids » pour prioriser la répartition de la charge:

upstream vip.local {

server example1.local weight=3;
server example2.local weight=6;
}
server {
listen 80;
server_name vip.local;
location / {
                proxy_pass http://vip.local;
                }
}

3) PHP

Comme indiqué dans l’introduction de ce tutoriel, Nginx ne gère pas nativement PHP (du moins pas aussi bien qu’Apache). Vous trouverez ci-dessous la marche à suivre pour implémenter PHP.

Installez PHP-FPM

apt-get install php5-fpm ou yum install php5-fpm

Redémarrez php5-fpm

service php5-fpm restart

Rajoutez la configuration suivante dans votre virtualhost (ou le VirtualHost default si vous n’avez pas défini de VirtualHost) dans la section server {}

   location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Si vous avez besoin de modules PHP spécifique pour faire tourner votre site web, il suffira de les installer via votre gestionnaire de paquet:

Exemple:

apt-get install php5-curl ou yum install php5-curl

 

Après un redémarrage de Nginx et de php5-fpm votre serveur nginx sera capable d’héberger des sites en PHP sans aucun souci!