Configuration de NGINX

1.    Installation de NGINX

NGINX est un logiciel libre qui peut jouer le rôle de serveur web, reverse proxy etc. Son développement a débuté en 2002 pour les besoins d’un site russe à très fort trafic (Rambler).  NGINX est un serveur asynchrone par opposition aux serveurs synchrones ou chaque requête est gérée par un processeur dédié. Le traitement de chaque requête est découpé en plusieurs petites tâches qui sont réparties sur les différents processeurs du serveur.  Il offre donc une performance plus élevée et une charge de consommation de mémoire particulièrement faible comparativement aux serveurs HTTP.

Dans ce tutoriel nous allons parler du mode serveur web et du mode proxy de NGINX.  Il faut noter sur nginx, ses différents modes fonctionnent tous en même temps et il suffit de les configurer. Le mode serveur web est le mode classique et est déjà configuré de base. Le mode proxy qu’en a lui permet de jouer le serveur proxy pour d’autres sites hébergés en local ou alors sur d’autre serveur web sur le réseau.

Nous allons commencer par installer NGINX sur notre machine.

apt   update   &&   apt   install   nginx

Une fois l’installation terminée, si tout s’est passé correctement vous pouvez constater que la page web par défaut de NGINX est accessible via le port 80. Taper dans votre navigateur l’IP de votre serveur ou alors http://localhost.

Ce qu’il faut savoir :

Le fichier de configuration principal de NGINX c’est : /etc/nginx/nginx.conf

Les répertoires utilisés pour ajouter des configurations à NGINX sont :

  • /etc/nginx/conf.d/*.conf (pour les fichiers avec l’extension .conf) : dans ce répertoire on place par exemple le fichier de configuration de PHP ou du serveur proxy pour NGINX.
  • /etc/nginx/sites-enabled/* (pour tous les fichiers qu’il contient) : Dans se répertoire nous aurons la liste des sites actifs. Il contiendra uniquement des liens symboliques des fichiers de configuration des sites qui sont situés en réalité dans le répertoire /etc/nginx/sites-available/.

NB : Ces 2 répertoires sont spécifiés dans le fichier de configuration principal de NGINX.

2.  Configuration d’un site web

Pour configurer un site web il suffit de :

  • Créer un fichier qui contiendra les configurations du site dans le répertoire /etc/nginx/sites-available/. Attention, à ce stade le site n’est pas encore connu de nginx donc il n’est pas encore actif.
  • Un fichier de configuration pour le site par défaut existe déjà il se nomme défaut.

Les informations de base que doit contenir le fichier de configuration d’un site sont les suivants.

Créer un fichier :

nano  /etc/nginx/sites-available/first_site

Éditer son contenu comme suite :

server {

	listen 80;

	server_name first_site.com;
	root /var/www/first_site;
	index index.html index.php;

	location / {

		try_files $uri $uri/ =404;

	}

}

Explication :

listen : désigne le port d’écoute.

Server_name : c’est le nom de domaine que l’on veut filtrer.

Root : c’est le répertoire qui hébergera notre site web. (Pensez à attribuer correctement les droits d’accès).

Index : permets de spécifier dans l’ordre les fichiers qui seront recherchés en premier comme fichier d’index par le serveur web.

Location : permets de configurer des actions automatiques lorsqu’un chemin est appelé, de charger des Frameworks, etc.

  • Créer ensuite un lien symbolique de ce fichier dans le répertoire /etc/nginx/sites-enabled/ afin d’activer le site. Il est à noter que pour désactiver le site temporairement il suffit de supprimer le lien symbolique qui est dans sites-enabled et pour le réactiver, il faut refaire un lien symbolique avec le fichier qui se trouve dans site-available.

Créer un lien symbolique pour activer notre site :

Positionné vous dans le répertoire sites-enabled

cd  /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/default
  • Vérifier les configurations de NGINX et recharger le fichier de configuration.

Vérifier les configurations :

nginx  -t

Vous devez avoir un résultat comme celui-ci

Recharger la configuration de NGINX :

service nginx reload

Essayer ensuite d’accéder à votre site web via le nom spécifié dans server_name. Bien évidemment vous devez avoir mis en place une résolution de nom afin que ce nom pointe vers votre serveur web.

3. Configuration de la fonction proxy

Contrairement à la fonctionnalité serveur web qui est configurée par défaut, la fonctionnalité serveur proxy doit être configurée pour être utilisable.

Il suffit de créer un fichier.  Proxy.conf dans le répertoire conf.d. ce fichier permet de spécifier les paramètres de configuration du serveur proxy.

nano    /etc/nginx/conf.d/proxy.conf

Entrer ensuite le contenu :

proxy_redirect          off;

proxy_set_header        Host            $host;

proxy_set_header          X-Forwarded-Host $host;

proxy_set_header          X-Forwarded-Server $host;

proxy_set_header          X-Forwarded-Proto $scheme;

proxy_set_header        X-Real-IP       $remote_addr;

proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size    10m;

client_body_buffer_size 128k;

client_header_buffer_size 64k;

proxy_connect_timeout   90;

proxy_send_timeout      90;

proxy_read_timeout      90;

proxy_buffer_size   16k;

proxy_buffers       32   16k;

proxy_busy_buffers_size 64k;

Vérifier les configurations de nginx :

nginx -t

Si tout est OK, alors relancez le service :

service nginx reload

Maintenant que la fonctionnalité Proxy est configurée. Si vous voulez créer un site qui pointe vers un autre (fonction proxy). Il suffit de créer un site en respectant les mêmes spécifications que celles vues plus haut dans le chapitre Configuration d’un site web. Sauf que nous allons adapter le fichier de configuration du site avec les configurations minimales suivantes :

nano /etc/nginx/sites-available/first_proxy.com
server {

	listen   80;
	server_name     first_proxy.com;

	location / {

		proxy_pass         http://localhost/;

	}

}

Pensez à créer le lien symbolique pour votre site si cela n’avait pas déjà été fait.

NB :

Ici nous n’avons plus de répertoire root car les requêtes seront redirigées vers le site pour lequel nous jouerons le rôle de serveur proxy.

Proxy_pass : permets de spécifier l’adresse du serveur proxy. http://localhost/. Si le site est accessible via un port autre que le port 80 vous devez spécifier l’adresse du site suivie du port  Ex : http://localhost:8080.

4. Système d’authentification Basic

Un système d’authentification basic vous permet de demander à l’utilisateur d’entre un login et un mot de passe pour avoir accès à une ressource (dans notre cas un site web).  Ce système est différent de l’interface de connexion du site, car il se lance avant même le chargement du code dans le répertoire.  Donc en gros le client n’a même pas accès à la page d’authentification du site s’il n’a pas les bons identifiants.

Ceci permettrait par exemple de protéger le répertoire qui contient les pages d’administration d’un site web.  Pour faire cela, on choisit un chemin qui sera protégé par notre code. Exemple : /admin ou /wp-admin comme c’est le cas sur WordPress. Cela permet d’accroitre la sécurité et de limiter les risques de brute force sur la page d’administration de votre site.

Pour commencer, nous allons installer l’outil apache2-utils  qui va nous permettre de créer le fichier de configuration pour l’authentification. Pour créer un fichier caché (.htpasswd) dans le répertoire /data/wordpress/, avec un utilisateur appelez Joel (vous pouvez avoir plusieurs utilisateurs différents dans le même fichier) utiliser la commande :

sudo   htpasswd   -c   /data/wordpress/.htpasswd   joel

Pour ajouter des utilisateurs à un fichier existant, utilisez la commande :

sudo   htpasswd    /data/wordpress/.htpasswd   joel

Si vous passez en paramètre le nom d’un utilisateur qui existe déjà, le mot de passe de ce dernier sera mis à jour.

Maintenant, ajouter les lignes suivantes dans le virtual host (dans le fichier de configuration de votre site web).  Ajoutez les dans les balises location de votre choix afin de protéger un chemin en particulier (se chemin peut être le  /). Dans mon cas je l’ajoute sur le chemin /admin

location   /admin/ {

	root   /var/www/mywebsite.com/admin;
	
	index  index.html index.htm;

	auth_basic "Restricted";                     #For Basic Auth

	auth_basic_user_file  /data/wordpress/.htpasswd; #For Basic Auth

}

Cette configuration est à adapter à votre configuration réelle.

Ensuite, vérifier les configurations de nginx :

nginx  -t 

rechargé ensuite les configurations si tout est correct :

Service  nginx  reload

Quand  vous essayez d’accéder à l’adresse qui a été spécifiée, vous aurez cette page d’authentification. La forme de la page d’authentification dépend bien sûr de votre navigateur :

1

5. Configuration de PHP

Après avoir configuré votre serveur web, vous pouvez ajouter un interpréteur php a NGINX afin de pouvoir héberger des sites codés en PHP sur votre Serveur.  Pour faire cela il suffit d’installer les paquets PHP (dans notre, car nous allons utiliser PHP-FPM) sur votre serveur et de configurer NGINC pour qu’il l’utilise PHP.

5.1  Installations de PHP-FPM

Mise à jour de la base de paquets et installation de PHP5-FPM

apt update && apt install PHP5-FPM

Nous utilisons ici php5-fpm au lieu de php car php-fpm est une implémentation alternative à PHP FastCGI qui offre en général de bien meilleures performances qu’en tant que module du serveur web. Le principe est de faire fonctionner php de manière séparée et d’utiliser le module FastCGI  afin de faire communiquer le serveur web avec l’interpréteur PHP.

5.2 Configuration de PHP-Fpm

Pour que nginx puisse transmettre les requêtes php a php-fpm il faut configurer le service d’écoute de php-fpm et ensuite le renseigner dans nginx pour qu’il puisse communiquer avec ce dernier.

Pour configurer php-fpm 2 possibilité s’offre à nous :

  • Si NGINX et PHP tourne sur la même machine, pour des raisons de performance nous utiliserons le socket Unix pour la communication.
  • Si nos 2 outils ne sont pas sur la même machine on se tourne vers le socket TCP.

Vu que dans notre cas PHP-FPM est installé sur la même machine que NGINX on va donc configurer PHP-Fpm pour qu’il utilise le Socket Unix.  Pour se faire nous allons modifier le fichier /etc/php5/fpm/pool.d/www.conf.

nano  /etc/php5/fpm/pool.d/www.conf

Chercher et modifier les 2 lignes suivantes. Vous commentez la première si elle est présente et vous décommettez la seconde si ce n’est pas déjà le cas.

;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock

ensuite pensez à redémarrer le service php-fpm pour appliquer les modifications.

service php5-fpm restart

5.3 Configuration de NGINX

On commence par déclarer le socket Unix de PHP-FPM au niveau de Nginx pour que celui-ci puisse lui transmettre les requêtes PHP qu’il reçoit, via /etc/nginx/conf.d/php5-fpm.conf.

nano   /etc/nginx/conf.d/php5-fpm.conf

Mettez-y le contenu suivant :

upstream php5-fpm-sock {

	server unix:/var/run/php5-fpm.sock;

}

Ensuite, adapter les configurations de votre Virtual host (fichier de configuration du site) pour qu’il ressemble à celui-ci. Cette configuration est à adapter en fonction de vos configurations réelles. En reprenant les configurations par défaut d’un site on ajoute les configurations pour interpréter le code PHP.

server {

	listen 80 ;

	root /var/www/html;

	index index.php index.html;

	server_name mon_domaine.fr www.mon_domaine.fr;

	access_log /var/log/nginx/mon_domaine.fr-access_log;

	error_log /var/log/nginx/mon_domaine.fr-error_log;

	location / {

		try_files $uri $uri/ /index.php?$args;

	}

	location ~ \.php$ {

		try_files $uri =404;

		fastcgi_index index.php;

		fastcgi_pass php5-fpm-sock;

		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

		include /etc/nginx/fastcgi_params;

	}

}

Créer ensuite un fichier php à la racine du répertoire de votre site :

echo "<?php phpinfo(); ?>" > /var/www/html/index.php

Redémarrer ensuite le service NGINX :

service nginx restart

Ensuite essayer d’accéder a votre site :  www.mon_domaine.fr vous aurez la page de PHP Version 5.6 suivant :

2

 6. Webographie

Le Blog Nicolargo

Le Blog de Guillaume 

 

4 réflexions au sujet de « Configuration de NGINX »

    1. Nginx deviens de plus en plus utilisé dans les entreprises. C’est léger, robuste, plus sécurisé et t’offres bien plus d’option avancées que les autres serveurs Web.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *