Présentation de Nginx
Nginx [engine x] est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d'un site russe à très fort trafic. (définition wikipédia)
A peu près 7% des sites utilisent ce serveur web dont wordpress.com ou encore linuxFr.org.
Nginx Vs Apache
Une question légitime doit vous interpeller, mais quelle différence y a t-il avec Apache ?
Nginx est capable de gérer les sites à fort trafic plus simplement qu’Apache. Nginx est un serveur asynchrone c’est-à-dire qu’il n’attend pas qu’une requête soit exécutée pour prendre en charge une autre. Ce qui permet une utilisation plus légère des ressources du système pour la gestion des pages statiques. Nginx permet de gérer un grand nombre de connexions utilisateurs simultanées.
Nginx ne reconnait pas les fichiers .htaccess, il faudra donc modifier la configuration du serveur (ex : réécriture d’url…) que nous verrons plus loin dans cet article.
Installation
Voici mon environnement pour cet article :
Je suis sur Windows avec une VM (VirtualBox) avec Ubuntu (14.04 LTS)
Mise à jour avec la dernière version stable :
Se rendre sur nginx.org/en/docs/install.html pour l’installation en fonction de votre système d’exploitation.
Récupérez la clé via la commande dans un de vos dossiers :
Ajoutez la clé :
On sait que toutes les sources de dépôts sont dans le fichier /etc/apt/source.list
On va simplement éditer ce fichier pour y rajouter ceux concernant Nginx, d’autres préféreront créer un fichier .list propre à Nginx.
pour y rajouter tout en bas :
Puis tapez ces commandes :
Petite aparté :
Lors de mon installation j’avais Apache de démarré. Veillez à stopper Apache : sudo service apache2 stop. Et démarrez Nginx : sudo service nginx start
Voici une petite commande qui vous permet de connaître les processus lancés et stoppés :
service --status-all
Vous devriez avoir
Il est bien sûr possible d’utiliser ces 2 serveurs web en même temps, il suffira de dire à Apache d’écouter sur le port 8080 et ainsi modifier toutes les configurations.
Vous pouvez désormais accéder par votre Ip à la page d’accueil de Nginx, qui vous souhaite la bienvenue 🙂
Passons maintenant à sa configuration
En se rendant dans le dossier etc/nginx on trouvera la configuration en ouvrant le fichier nginx.conf par un petit vi ou vim.
N’hésitez pas a vous rendre sur la documentation qui vous trouverez sur http://nginx.org/en/docs/
Allons voir la configuration qui a été faite pour afficher la page d’accueil lors de l’installation.
Rendez-vous dans le dossier /etc/nginx/conf.d
Ouvrez le fichier default.conf.
*1 : permet de définir un nouveau serveur
*2 : port d’écoute par défaut
*3 : nom de domaine par lequel on accédera au site (on verra plus bas qu’on peut changer ce nom)
*4 : c’est là qu’on définit le chemin vers les fichiers de notre site
*5 : par défaut il ira chercher le fichier index.html ou le fichier index.htm
*6 : en cas d’erreur charge le fichier 50x.html à la racine
*7 : condition qui demande en cas d’accés au fichier 50x.html d’aller chercher le fichier /usr/share/nginx/html
On va créer maintenant notre propre fichier de configuration correspondant à notre site et non pas utiliser le fichier par défaut :
Dans le dossier /etc/nginx/conf/ créer le fichier maconfig (vous donnez le nom que vous voulez bien sûr) avec :
Voici notre toute nouvelle configuration :
Cette configuration nous suffit pour le moment, on sera amené à la modifier par la suite.
J’ai rajouté quelques lignes dans ma configuration qui peuvent être utiles :
*1 : Chemin du fichier pour mes erreurs de logs
*2 : Chemin du fichier pour mes logs d’accés qui permettent de suivre tous ceux qui accéderont au site
Après sauvegarde du fichier on redémarre nginx qui permet de prendre en compte notre nouvelle configuration via cette commande :
Vous avez sûrement une erreur comme moi.
Voici une commande qui est pratique avant toute relance du serveur, elle permet de garantir qu’il n’y a pas d’erreur ou au contraire vous donne les erreurs :
Cette erreur apparaît simplement car notre dossier logs n’existe pas.
Une fois le dossier créé nous pouvons alors relancer notre serveur.
Vous pointez désormais sur votre site.
Création d’un nom de domaine
On va maintenant créer un nom de domaine pour accéder à notre site plutôt qu’avec notre Ip.
On va pour cela modifier le fichier hosts, pour mon cas je suis sur Windows qui se trouve dans le dossier suivant :
On va simplement rajouter une entrée dans ce fichier pour lui dire quand j’essaye d’accéder avec monsitesurnginx (cela correspond au nom donné sur le fichier de conf défini plus haut) qui pointera sur l’Ip de ma machine.
Sauvegardez votre fichier qui vous permettra désormais d’accéder à votre site avec votre nouveau nom de domaine.
Règles de gestion
Comme expliqué plus haut Nginx ne connait pas les fichiers .htaccess et ne peut donc les interpréter. Toutes les règles qui sont définies dans ce fichier seront à rajouter dans notre fichier de conf sous une autre syntaxe bien sûr 🙂
Une des choses que nous avons le plus souvent besoin de faire est la réécriture d’url. Voyons ensemble comment la faire avec Nginx :
Pour définir la règle suivante :
Lorsque l’on tapera http://monsitesurnginx/accueil cela redirigera sur http://monsitesurnginx
Voici le fichier de configuration modifié :
*1 : on définit par l’instruction rewrite lorsque l’on tape /accueil on redirige sur /
Notez contrairement à Apache que lorsque l’on essaye d’accéder à un dossier de notre site, Nginx vous enverra une belle erreur 403 et ne vous listera pas le dossier comme Apache le ferait.
Pour cela nous allons modifier notre configuration afin de permettre le listing de fichier :
*1 : autorise le listing de tous les dossiers se trouvant à la racine, désactivé par défaut
Si au contraire on ne veut pas pouvoir lister tous les dossiers à la racine, on spécifiera le dossier en question :
Dernière petite astuce que je me dois de partager, voici un lien de site qui permet "la conversion" d’un fichier htaccess compatible Nginx :
http://winginx.com/en/htaccess
Voilà bravo vous avez effectué vos premiers pas avec Nginx. Je vous laisse vous faire votre propre opinion quant à sa simplicité de configuration.
Nous verrons lors d’un prochain article l’installation sur Nginx de php et mysql.
Crédits :