Vos premiers pas avec le serveur Nginx

Nginx-Logo

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)

apt-get search nginx => vous verrez qu’il est déjà présent.

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 :

wget http://nginx.org/keys/nginx_signing.key

Ajoutez la clé :

sudo apt-key add nginx_signing.key

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.

sudo vi /etc/apt/source.list

pour y rajouter tout en bas :

deb http://nginx.org/packages/ubuntu/ SELON_VOTRE_DITRIBUTION nginx
deb-src http://nginx.org/packages/ubuntu/ SELON_VOTRE_DITRIBUTION nginx

Puis tapez ces commandes :

apt-get update
apt-get install nginx

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

[-] apache
[+] nginx

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.

server *1 {
        listen        80; *2
        server_name   localhost; *3                 

        location / {
             root    /usr/share/nginx/html *4
             index   index.html  index.htm  *5
       }

      error_page   500  502   503  504    /50x.html *6

      location  = /50x.html {  *7
          root   /usr/share/nginx/html;
      }
}

*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 :

sudo vi monsitesurnginx.conf

Voici notre toute nouvelle configuration :

server {
        listen        80;
        server_name   monsitesurnginx;      

        location / {
             root    /var/www/html
             index   index.html  index.htm
        }

       error_log   /var/www/html/logs/error_log  *1
       access_log  /var/www/html/logs/access_log *2

}

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 :

sudo service nginx restart

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 :

sudo nginx -t
nginx: [emerg] open() "/var/www/logs/error.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

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 :

C:\Windows\System32\drivers\etc

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.

VOTREIP    monsitesurnginx

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é :

server {
        listen                 80;
        server_name   monsitesurnginx ;      

        location / {
             root      /var/www/html
             index   index.html  index.htm
        }

        Rewrite ^/accueil$ /  *1

        error_log     /var/www/html/logs/error_log
        access_log  /var/www/html/logs/access_log

}

*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 :

server {
        listen                 80;
        server_name   monsitesurnginx ;      

        location / {
             root      /var/www/html
             index   index.html  index.htm
        }

        location / {
            autoindex  on ; *1            
        }

        Rewrite ^/accueil$ /

        error_log     /var/www/html/logs/error_log
        access_log  /var/www/html/logs/access_log
}

*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 :

location /css {
  autoindex on;
}

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 :

https://nginx.org/en/docs/

https://fr.wikipedia.org/wiki/Nginx

Laisser un commentaire

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

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.