Tutoriel Vidéo PHP Nginx Nginx + PHP

Télécharger la vidéo

Parce qu'il n'y a pas qu'apache dans la vie je vous propose de découvrir comment installer et configurer nginx pour le faire fonctionner avec vos projets PHP.

Installation de nginx

Installer nginx n'a rien de bien complexe il suffit d'utiliser le gestionnaire de paquet. Sur Debian on utilisera la commande apt-get.

sudo apt-get update
sudo apt-get upgrade 
sudo apt-get install nginx
sudo service nginx start

Il n'y a rien de plus à faire. Par défaut nginx va démarrer sur le port 80 et vous devriez voir la fameuse page Welcome to nginx en vous rendant sur l'ip de votre serveur (si votre parefeu ne bloque pas ce port évidemment).

On va évidemment vouloir personnaliser la page d'accueil pour faire pointer nginx sur le dossier de notre choix. Pour cela il suffit de modifier le fichier se trouvant dans /etc/nginx/sites-enabled. On remplacera la partie root pour relier à notre dossier /home/www

server {
        listen   80;

        root /home/www;
        index index.html index.htm;

        server_name localhost;

        location / {
                try_files $uri $uri/ /index.html;
        }

}

Installation de PHP-FPM

Nginx n'est pas capable de comprendre le PHP et dès que vous appellez un fichier php il vous lance un téléchargement. Il faut donc lui expliquer comment traiter les fichiers PHP. Contrairement à Apache il n'est pas possible d'intégrer un module PHP à Nginx mais on va utiliser l'aspect reverse proxy de nginx pour ça.
Lorsqu'une personne essaiera de charger un fichier php, nginx utilisera fastcgi pour communiquer avec le process PHP et obtenir un retour.

sudo apt-get install php5-fpm
sudo service php5-fpm start

Nous allons tout de suite modifier la configuration de php via le fichier php.ini afin de combler un problème de sécurité en modifiant la variable fix_pathinfo.

sudo vi /etc/php5/fpm/php.ini

Trouvez alors la ligne correspondant à cgi.fix_pathinfo et mettez

cgi.fix_pathinfo=0

Ceci permet d'éviter que PHP FPM corrige les chemin qui lui sont envoyé ce qui peut engendrer l'éxécution de scripts non désirés. (en effet par défaut si PHP ne trouve pas un fichier il essaiera de corriger le chemin et on peut alors lui faire éxécuter du php sur d'autre type de fichier en tapant par exemple img.jpg/fake.php)

nginx + php

Maintenant que nous avons nginx et PHP il faut faire communiquer les 2. Pour cela nous allons remodifier notre configuration default et y ajouter la gestion du php.

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

Si vous souhaitez obtenir plus d'information sur ces paramètres rendez vous sur la documentation. En résumé si on détecte un fichier php on transmet les information à php5-fpm qui se charge alors de traiter le fichier et nous renvoyer le résultat.

Les .htaccess

Un dernier petit détail concernant les .htaccess. Ces fichiers sont là pour outrepasser la configuration d'apache pour par exemple définir une réécriture d'URL. Il n'existe pas d'équivalent sur Nginx et vous devrez modifier la configuration de votre server{} si vous souhaitez obtenir des résultats similaire. En revanche il est conseillé de bloquer l'accès aux fichier commençant par . pour éviter que des petits curieux trouve vos .htaccess.

location ~ /\. { deny all; access_log off; log_not_found off; }