28 Avr

Nginx et PHP

Nginx est un serveur web concurrent d’Apache très populaire, mais il est bien plus encore. Il peut aussi être utilisé comme reverse-proxy, load-balancer, terminaison ssl etc. Personnellement, je le trouve bien plus simple et cohérent à configurer qu’Apache. Ce post va proposer et expliquer une configuration basique pour faire tourner nginx avec du php sous Debian.
Concernant les configurations que l’on peut trouver dans les tutos sur internet, j’appellerai à la plus grande méfiance (à commencer par le mien) ! Pour vous en convaincre, je vous conseille de faire un tour sur la page des pièges de config du wiki nginx. La erreurs référencées se retrouvent fréquemment dans la plupart des tutos quand ces derniers n’utilisent pas des éléments de config obsolètes. Bien évidemment, je m’inspire des docs officielles (ici et ) pour mes propres configurations.

Environnement

OS : Debian 7.5 stable (Wheezy) (64bits)
Nginx : nginx/1.2.1
PHP : 5.4.4

Installation des Packages sous Debian

Pour le moment, seuls ces deux packages suffisent pour une installation minimale:

Bien sûr, par la suite de nombreux modules peuvent être nécessaires selon ce que vous faite tourner. S’il s’agit d’un CMS comme WordPress, une base de donnée comme MySql sera obligatoire!

Création de la Racine du Serveur Web

On va à titre de démonstration créer un simple ficher php basique à l’aide de nano:

Voilà! Le contenu de votre premier serveur web est créé. Il ne reste plus qu’à réaliser la configuration de nginx.

Configuration Nginx et php5-fpm

La première chose à vérifier est le socket utilisé par php5-fpm

Il s’agit ici de la valeur par défaut sur un Debian 7.4. Mais, elle peut varier selon le linux utilisé.
Pour Nginx, créez à l’aide de nano un premier fichier /etc/nginx/php_params qui servira de template pour le traitement des requêtes php dans vos différentes configurations de serveur web. Faites attention à la ligne 25 justement qui doit correspondre au socket utilisé par php5-fpm.

Ensuite, créez le fichier même de configuration du serveur web toujours à l’aide de nano, ici /etc/nginx/sites-available/mondomaine. Le « ln -s » crée le lien symbolique qui active le serveur virtuel dans nginx.

Quelques Explications

Les « try_files » à la ligne 21 et 30 sont important. C’est généralement une mauvaise idée de passer une requête php au fastcgi sans avoir testé l’existence du fichier. Il s’agit d’une vulnérabilité grave dans votre serveur.
Le « index » à la ligne 16 renseigne les fichiers à servir par défaut. Ici index.php
Le « location »: Nginx agit par blocs définis par des locations :

  • le « location / » à la ligne 21 agit sur les uri avec le prefix « / »
  • le « location ~ \.php » à la ligne 27 est une regex (symbole ~) sur toutes les uri contenant « .php »
  • le « location ~ /\. » à la ligne 34 interdit l’accès aux fichiers commençant par .

Maintenant, il ne reste plus qu’à recharger la nouvelle configuration dans Nginx :

Résultat

Si tout s’est bien passé, notamment si votre nom de domaine pointe bien vers votre serveur nginx, vous n’avez plus qu’à taper dans votre navigateur préféré www.mondomaine.com et voir s’afficher:
phpinfo()

PHP Logo

PHP Version 5.4.4-14+deb7u9

SystemLinux server 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3 x86_64
Build DateApr 18 2014 14:36:01
Server APIFPM/FastCGI
Virtual Directory Supportdisabled
Configuration File (php.ini) Path/etc/php5/fpm
Loaded Configuration File/etc/php5/fpm/php.ini
Scan this dir for additional .ini files/etc/php5/fpm/conf.d
Additional .ini files parsed/etc/php5/fpm/conf.d/10-pdo.ini

Pour la Suite

Maintenant, il ne vous reste plus qu’à développer votre site web ou en installer un tout fait. Ce ne sont pas les applicatifs qui manquent sur internet. Si vous utilisez un CMS type WordPress, il vous faudra probablement installer aussi MySql avec un simple

Bien évidemment, il ne s’agit que d’une configuration basique qui sera à adapter au cas par cas. Et comme d’habitude, rien ne remplace une lecture rigoureuse de la documentation officielle.

Laisser un commentaire

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

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