Configuration de NGINX

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.

[pastacode lang= »bash » manual= »apt%20%20%20update%20%20%20%26%26%20%20%20apt%20%20%20install%20%20%20nginx » message= » » highlight= » » provider= »manual »/]

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.

Créer un fichier :

[pastacode lang= »bash » manual= »nano%C2%A0%20%2Fetc%2Fnginx%2Fsites-available%2Ffirst_site » message= » » highlight= » » provider= »manual »/]

Éditer son contenu avec les informations de base que doit contenir le fichier de configuration d’un site au minimum comme suit :

[pastacode lang= »apacheconf » manual= »server%20%7B%0A%0A%09listen%2080%3B%0A%0A%09server_name%20first_site.com%3B%0A%09root%20%2Fvar%2Fwww%2Ffirst_site%3B%0A%09index%20index.html%20index.php%3B%0A%0A%09location%20%2F%20%7B%0A%0A%09%09try_files%20%24uri%20%24uri%2F%20%3D404%3B%0A%0A%09%7D%0A%0A%7D » message= » » highlight= » » provider= »manual »/]

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.

Positionné vous dans le répertoire sites-enabled et Créer un lien symbolique vers  le fichier précédent pour activer notre site :

[pastacode lang= »bash » manual= »cd%C2%A0%20%2Fetc%2Fnginx%2Fsites-enabled%2F%0Aln%20-s%20%2Fetc%2Fnginx%2Fsites-available%2Ffirst_site%20%20first_site » message= » » highlight= » » provider= »manual »/]

  • Vérifier les configurations de NGINX et recharger le fichier de configuration.

Vérifier les configurations :

[pastacode lang= »bash » manual= »nginx%C2%A0%20-t » message= » » highlight= » » provider= »manual »/]

Vous devez avoir un résultat comme celui-ci

Recharger la configuration de NGINX :

[pastacode lang= »bash » manual= »service%20nginx%20reload » message= » » highlight= » » provider= »manual »/]

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.

[pastacode lang= »bash » manual= »nano%C2%A0%C2%A0%C2%A0%20%2Fetc%2Fnginx%2Fconf.d%2Fproxy.conf » message= » » highlight= » » provider= »manual »/]

Entrer ensuite le contenu :

[pastacode lang= »apacheconf » manual= »proxy_redirect%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20off%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20Host%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%24host%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20X-Forwarded-Host%20%24host%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20X-Forwarded-Server%20%24host%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20X-Forwarded-Proto%20%24scheme%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20X-Real-IP%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%24remote_addr%3B%0A%0Aproxy_set_header%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20X-Forwarded-For%20%24proxy_add_x_forwarded_for%3B%0A%0Aclient_max_body_size%C2%A0%C2%A0%C2%A0%2010m%3B%0A%0Aclient_body_buffer_size%20128k%3B%0A%0Aclient_header_buffer_size%2064k%3B%0A%0Aproxy_connect_timeout%C2%A0%C2%A0%2090%3B%0A%0Aproxy_send_timeout%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%2090%3B%0A%0Aproxy_read_timeout%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%2090%3B%0A%0Aproxy_buffer_size%C2%A0%C2%A0%2016k%3B%0A%0Aproxy_buffers%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%2032%C2%A0%C2%A0%2016k%3B%0A%0Aproxy_busy_buffers_size%2064k%3B » message= » » highlight= » » provider= »manual »/]

Vérifier les configurations de nginx :

[pastacode lang= »bash » manual= »nginx%20-t » message= » » highlight= » » provider= »manual »/]

Si tout est OK, alors relancez le service :

[pastacode lang= »bash » manual= »service%20nginx%20reload » message= » » highlight= » » provider= »manual »/]

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 :

[pastacode lang= »bash » manual= »nano%20%2Fetc%2Fnginx%2Fsites-available%2Ffirst_proxy.com » message= » » highlight= » » provider= »manual »/]

[pastacode lang= »apacheconf » manual= »server%20%7B%0A%0A%09listen%C2%A0%C2%A0%2080%3B%0A%09server_name%C2%A0%C2%A0%C2%A0%C2%A0%20first_proxy.com%3B%0A%0A%09location%20%2F%20%7B%0A%0A%09%09proxy_pass%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20http%3A%2F%2Flocalhost%2F%3B%0A%0A%09%7D%0A%0A%7D » message= » » highlight= » » provider= »manual »/]

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 :

[pastacode lang= »bash » manual= »sudo%C2%A0%C2%A0%20htpasswd%C2%A0%C2%A0%20-c%C2%A0%C2%A0%20%2Fdata%2Fwordpress%2F.htpasswd%C2%A0%C2%A0%20joel » message= » » highlight= » » provider= »manual »/]

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

[pastacode lang= »bash » manual= »sudo%C2%A0%C2%A0%20htpasswd%C2%A0%C2%A0%C2%A0%20%2Fdata%2Fwordpress%2F.htpasswd%20%C2%A0%20joel » message= » » highlight= » » provider= »manual »/]

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

[pastacode lang= »apacheconf » manual= »location%C2%A0%C2%A0%20%2Fadmin%2F%20%7B%0A%0A%09root%C2%A0%C2%A0%20%2Fvar%2Fwww%2Fmywebsite.com%2Fadmin%3B%0A%09%0A%09index%C2%A0%20index.html%20index.htm%3B%0A%0A%09auth_basic%20%22Restricted%22%3B%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%23For%20Basic%20Auth%0A%0A%09auth_basic_user_file%20%C2%A0%2Fdata%2Fwordpress%2F.htpasswd%3B%20%23For%20Basic%20Auth%0A%0A%7D » message= » » highlight= » » provider= »manual »/]

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

Ensuite, vérifier les configurations de nginx :

[pastacode lang= »bash » manual= »nginx%C2%A0%20-t%C2%A0″ message= » » highlight= » » provider= »manual »/]

rechargé ensuite les configurations si tout est correct :

[pastacode lang= »bash » manual= »Service%20%C2%A0nginx%20%C2%A0reload » message= » » highlight= » » provider= »manual »/]

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

[pastacode lang= »bash » manual= »apt%20update%20%26%26%20apt%20install%20PHP5-FPM » message= » » highlight= » » provider= »manual »/]

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.

[pastacode lang= »bash » manual= »nano%C2%A0%20%2Fetc%2Fphp5%2Ffpm%2Fpool.d%2Fwww.conf » message= » » highlight= » » provider= »manual »/]

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.

[pastacode lang= »apacheconf » manual= »%3Blisten%20%3D%20127.0.0.1%3A9000%0Alisten%20%3D%20%2Fvar%2Frun%2Fphp5-fpm.sock » message= » » highlight= » » provider= »manual »/]

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

[pastacode lang= »bash » manual= »service%20php5-fpm%20restart » message= » » highlight= » » provider= »manual »/]

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.

[pastacode lang= »bash » manual= »nano%C2%A0%C2%A0%20%2Fetc%2Fnginx%2Fconf.d%2Fphp5-fpm.conf » message= » » highlight= » » provider= »manual »/]

Mettez-y le contenu suivant :

[pastacode lang= »apacheconf » manual= »upstream%20php5-fpm-sock%20%7B%0A%0A%09server%20unix%3A%2Fvar%2Frun%2Fphp5-fpm.sock%3B%0A%0A%7D » message= » » highlight= » » provider= »manual »/]

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.

[pastacode lang= »apacheconf » manual= »server%20%7B%0A%0A%09listen%2080%20%3B%0A%0A%09root%20%2Fvar%2Fwww%2Fhtml%3B%0A%0A%09index%20index.php%20index.html%3B%0A%0A%09server_name%20mon_domaine.fr%20www.mon_domaine.fr%3B%0A%0A%09access_log%20%2Fvar%2Flog%2Fnginx%2Fmon_domaine.fr-access_log%3B%0A%0A%09error_log%20%2Fvar%2Flog%2Fnginx%2Fmon_domaine.fr-error_log%3B%0A%0A%09location%20%2F%20%7B%0A%0A%09%09try_files%20%24uri%20%24uri%2F%20%2Findex.php%3F%24args%3B%0A%0A%09%7D%0A%0A%09location%20~%20%5C.php%24%20%7B%0A%0A%09%09try_files%20%24uri%20%3D404%3B%0A%0A%09%09fastcgi_index%20index.php%3B%0A%0A%09%09fastcgi_pass%20php5-fpm-sock%3B%0A%0A%09%09fastcgi_param%20SCRIPT_FILENAME%20%24document_root%24fastcgi_script_name%3B%0A%0A%09%09include%20%2Fetc%2Fnginx%2Ffastcgi_params%3B%0A%0A%09%7D%0A%0A%7D » message= » » highlight= » » provider= »manual »/]

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

[pastacode lang= »bash » manual= »echo%20%22%3C%3Fphp%20phpinfo()%3B%20%3F%3E%22%20%3E%20%2Fvar%2Fwww%2Fhtml%2Findex.php » message= » » highlight= » » provider= »manual »/]

Redémarrer ensuite le service NGINX :

[pastacode lang= »bash » manual= »service%20nginx%20restart » message= » » highlight= » » provider= »manual »/]

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 

 

joel

6 commentaires

Bastien Publié le14 h 35 min - 13 octobre 2016

Très bon article, par contre il serait judicieux de rajouter un sommaire pour mieux s’y retrouver.

    joel Publié le9 h 20 min - 14 octobre 2016

    OK je vais essayer de le faire. Merci Bastien

Cyril B Publié le5 h 09 min - 3 novembre 2016

Cool article,
Je trouverais un de ces jours le temps d’essayer cette appli.
Je ne savais pas que NGINX se démarquait autant des autres serveurs web

    Tibson Publié le9 h 39 min - 24 novembre 2016

    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.

philippe Publié le8 h 53 min - 6 octobre 2018

bonjour

question de gros débutant :

le site s’appelle first_site.com comment le lien suivant permet de l’activer ?

cd /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/default

    joel Publié le21 h 01 min - 8 novembre 2018

    il faut simplement mettre le bon nom de site dans le fichier default. désolé je suis très chargé actuellement et je n’arrive pas forcément a répondre rapidement aux questions.