Creer un serveur Linux, Nginx, MySQL, PHP
Emmanuel Gautier / February 15, 2015
5 min read
Apache n'est pas le seul serveur HTTP existant pour desservir des applications écrites en PHP, de nombreux autre existent dont Nginx. Dans le cas de l'utilisation de Nginx pour desservir des applications PHP on appellera cela une pile LEMP pour Linux, Nginx, Mysql et PHP.
Nginx
Nginx est un serveur HTTP créé en 2002 par Igor Sysoev. Devenu populaire peu après 2006, le nombre de serveurs web l'utilisant est en constante augmentation et il séduit de plus en plus de développeurs et administrateurs système. Selon un récent sondage de Netcraft, on dénombrerait près de 15% de l'ensemble des serveurs utilisant comme serveur HTTP Nginx. Il a pour avantage principal d'être léger et modulaire se qui est atout de performance non négligeable. Il peut également avec le rôle de proxy inversé à travers l'utilisation d'une interface FastCGI.
Dans ce tutoriel nous allons vous faire installer la dernière version du serveur. Pour ce faire nous n'utiliserons pas les dépôts officiels de la distribution linux mais les dépôts de Nginx eux-mêmes. Il vous faudra remplacer codename par le nom de version de Ubuntu dans les lignes de commandes suivantes.
Attention les dépôts pris dans ce tutoriel fonctionnent pour la distribution Ubuntu. Pour toute autre distribution, vous pouvez trouver le lien vers les dépôts correspondants sur la documentation
sudo echo "deb https://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx
deb-src https://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx-stable.list
wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt-get update && sudo apt-get install nginx
Pour certaines raisons il est possible que la ligne d'ajout de clé ne fonctionne pas. Si tel est le cas, il vous faut remplacer la ligne précédante par la suivante.
wget -O - https://nginx.org/keys/nginx_signing.key > key.gpg && sudo apt-key add key.gpg
Pour les utilisateurs d'ubuntu, vous avez également la possibilité d'utiliser le dépot Launchpad de Nginx. Voici comment procéder.
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update && sudo apt-get install nginx
MySQL
Afin de continuer la construction de notre pile applicative, nous avons besoin d'installer la base de données MySQL. Pour rappel MySQL est une base de données relationnelle (SGBDR) détenue par Oracle. Elle nous servira plus tard à stocker nos informations et les requêter à partir de PHP.
sudo apt-get install mysql-server mysql-client
Il s'agit maintenant d'avoir une base d'installation saine et sécurisée. Des utilitaires fournis avec le logiciel vous permette de mettre en place des configurations et des stratégies de sécurité de base.
sudo mysql_install_db
sudo /usr/bin/mysql_secure_installation
PHP-FPM
L'installation de PHP au sein d'un serveur web est souvent associée à l'installation d'un module apache, or l'interpréteur de ce langage peut bien entendu être exécuté hors du contexte de Apache. PHP-FPM est une interface de communication avec PHP par le protocole FastCGI. Dans notre cas Nginx pourra donc communiquer avec PHP via le protocole FastCGI grâce à PHP-FPM.
Voici maintenant comment installer PHP-FPM :
sudo apt-get install php5-fpm
Pour pouvoir faire la relation avec la base de données mysql, il convient d'installer le module php correspondant :
sudo apt-get install php5-mysql
En fonction de vos besoins, vous avez la possibilité d'installer des modules complémentaires à votre instance PHP.
sudo apt-get install php5-mcrypt php5-curl php5-gd
Configuration de PHP-FPM
Afin de pouvoir exécuter du PHP à partir de requête fait par Nginx, quelques configurations préalables sont nécessaires.
La configuration suivante concerne un point de sécurité. Dans le cas où la variable fix_pathinfo
est à 1, l’interpréteur essayera de trouver un chemin de fichier le plus proche possible de celui demandé. En désactivant cette option, nous obligeons à prendre en compte les chemins de fichiers exactes uniquement. Il se peut que cette configuration de sécurité soit déjà active sur les dernières versions de php-fpm.
# /etc/php5/fpm/php.ini
cgi.fix_pathinfo = 0
Afin de faire communiquer PHP-FPM et Nginx, nous allons utiliser des sockets Unix. Pour ce faire, voici la configuration à effectuer :
#/etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
Redémarrez ensuite le processus php
sudo service php5-fpm restart
Création d'un site
Nous allons modifier le site par défaut de Nginx afin qu'il puisse permettre l'exécution de php. Pour ce faire voici la configuration de notre site par défaut :
#/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
# Make site accessible from http://example.com/
server_name example.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
# pass the PHP scripts to FastCGI server
#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Redémarrez Nginx
sudo service nginx restart
Les dernières lignes de notre configuration spécifient que pour tout chemin se terminant par .php, nous envoyons par FastCGI une commande d'exécution ayant un index et des paramètres définis. Comme vous le constatez, nous utilisons le chemin du socket unix que nous avons spécifié un peu plus tôt dans la configurations de PHP-FPM.
Il nous faut maintenant vérifier notre configuration. Pour ce faire nous allons créer un simple fichier PHP que nous mettrons à la racine du site par défaut de Nginx (/var/www/html
).
<?php phpinfo(); ?>
Comments
Articles sur le même sujet
MySQL Docker Image pour les Mac ARM M1
Le problème avec les Apple M1 et les Apple M2 est que de nombreux logiciels ne sont encore pas compatible avec la microarchitecture ARMv8 comme les images officielles Docker pour MySQL par exemple.
Utilisateurs et privilèges sous MySQL
L'administration d'une base de données inclue la gestion des utilisateurs et de leurs privilèges. La plupart du temps, une interface graphique, telle que MySQL Workbench ou PHPMyAdmin, est disponible pour réaliser de façon simple les actions liées à cette gestion. Dans ce tutoriel, nous allons voir comment réaliser la gestion des utilisateurs MySQL au moyen de requêtes SQL.
Utilisateurs et privilèges sous MySQL
L'administration d'une base de données inclue la gestion des utilisateurs et de leurs privilèges. La plupart du temps, une interface graphique, telle que MySQL Workbench ou PHPMyAdmin, est disponible pour réaliser de façon simple les actions liées à cette gestion. Dans ce tutoriel, nous allons voir comment réaliser la gestion des utilisateurs MySQL au moyen de requêtes SQL.
Articles mis en avant
Comment activer la vérification de typage pour Python dans VSCode
Python supporte désormais le [type hints](https://docs.python.org/3/library/typing.html). Dans cet article, nous allons voir comment avoir de l'IntelliSense pour le typage ainsi qu'avoir les erreurs de typage sur Visual Studio Code.
Comment gérer l'internationalisation avec NextJS SSG
Générer statiquement un site avec le framework NextJS pour différentes langues n'est pas si simple.
Utilisateurs et privilèges sous MySQL
L'administration d'une base de données inclue la gestion des utilisateurs et de leurs privilèges. La plupart du temps, une interface graphique, telle que MySQL Workbench ou PHPMyAdmin, est disponible pour réaliser de façon simple les actions liées à cette gestion. Dans ce tutoriel, nous allons voir comment réaliser la gestion des utilisateurs MySQL au moyen de requêtes SQL.