Présentation

Cela fait quelques mois que je suis entrain de passer sous Nginx tous mes serveurs web (sauf le frontal que je garde en Apache parce que c’est une grosse opération qui me tente pas vraiment pour l’instant)
Le choix de Nginx est tout fait car il est à la fois flexible et plus performant qu’Apache.
Voici donc un guide d’installation d’un serveur LEMP en utilisant la dernière version Nginx, MariaDB et PHP 7.
L’ensemble de la procédure se fera sous Debian 8 , la dernière version en date de Debian Stable, mais elle peut être facilement adaptée à de nombreuses autres distributions.

 

Pré-requis

  • Un serveur sous Debian 8 (à jour si possible)
  • Un accès SSH à ce serveur

 

Installation des paquets

La dernière version d’Nginx n’est pas disponible sur les repos officiels de Debian, nous ajouterons donc les repos d’Nginx.org ; de même PHP 7 n’est disponible que sur les repos dotdeb.org pour le moment. Il faut donc ajouter ces sources à notre fichier /etc/apt/sources.list :

vi /etc/apt/sources.list
# Nginx and Dotdeb(PHP7) repositories :
http://nginx.org/packages/mainline/debian/ jessie nginx
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
Ajout des clefs GPG respectives :
cd /tmp
wget
http://nginx.org/keys/nginx_signing.key
wget
https://www.dotdeb.org/dotdeb.gpg
aptkey add nginx_signing.key
aptkey add dotdeb.gpg
apt update

Installation de Nginx et PHP7 :

apt install nginx php7.0mysql php7.0fpm php7.0curl
Et pour terminer nous allons installer MariaDB. Lors de l’installation il faudra choisir le mot de passe de l’utilisateur root.
apt install mariadb-server mariadb-client

 

Sécurisation de MariaDB

Pour finaliser l’installation de MariaDB nous allons lancer la commande suivante en laissant toutes les options par défaut.
mysql_secure_installation
Nous en avons donc terminé pour l’installation des paquets préliminaires. Nous allons passer à la configuration.

 

Configuration de Nginx

Dans un premier temps nous allons éditer le fichier /etc/php/7.0/fpm/php.ini et modifier la ligne cgi.fix_pathinfo en enlever le point virgule et en passant sa valeur à 0 de telle manière :

cgi.fix_pathinfo=0

Puis nous allons configurer Nginx pour qu’il s’exécute avec l’utilisateur www-data. Pour cela nous allons éditer le fichier /etc/nginx/nginx.conf et modifier la ligne user. Il est également possible de modifier la variable worker-process avec le nombre de cœurs disponibles sur votre serveur.

user  www-data;
worker_processes  2;

Désormais nous allons créer notre vhost Nginx. Mais avant tout, faisons une sauvegarde du fichier de configuration par défaut :

mv /etc/nginx/conf.d/default.conf /etc/nginx/default.conf.bak

Et nous éditons /etc/nginx/conf.d/default.conf avec les valeurs suivantes :

server {
listen       80;
server_name  localhost;

root /var/www/html;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

error_page  404              /404.html;
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /usr/share/nginx/html;
}

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

Pour terminer nous n’avons plus qu’à redémarrer nos services :

systemctl restart nginx.service && systemctl restart php7.0fpm.service
Le serveur Web est maintenant prêt à l’emploi et peut être utilisé pour de nombreuses applications.