Configurer PHP & Nginx

18 avril 2022
Server
Nginx
PHP
Configurer PHP & Nginx - Banner

Introduction

Comment mettre en ligne nos pages web écrit en PHP avec Nginx ? Comment Nginx se communique avec PHP ? Dans cet article, on va voir la configuration de Nginx pour qu'il supporte PHP et on va regarder aussi les notions importantes dans leur communication.

Communication entre Nginx et PHP

Nginx est un serveur web mais il n'est pas capabe de traiter des fichiers PHP. Pour traiter des fichiers PHP, il passe la requête vers un FastCGI serveur qui tourne l'application PHP, puis ce FastCGI serveur renvoie la réponse vers Nginx et Nginx la renvoie vers l'utilisateur.

FastCGI est une protocole permettant la communication entre un serveur HTTP et un logiciel indépendant. Il est basé sur le standard CGI (Common Gateway Interface) qui indique comment transmettre la requête du serveur HTTP au programme, et comment récupérer la réponse générée.

PHP possède le FPM (FastGCI Process Manager) pour s'interfacer un serveur web avec PHP. FPM est une implémentation de FastCGI avec des fonctionnalités supplémentaires utiles pour les sites très chargés.

Nginx et PHP-FPM tournent indépendamment, et ils peuvent se communiquer grâce à leur implémentation de la norme que FastCGI impose. Comme FastCGI est une protocole, il peut être implémenter par n'importe quel langage qui supporte le réseau socket tel que Go, Python, etc.

Configuration de Nginx & PHP

La configuration consiste à rediriger les requêtes vers PHP-FPM (FastCGI serveur) avec quelques paramètres. Nginx intègre une module FastCGI et il peut passer les requêtes vers un FastCGI serveur grâce à la directive fastcgi_pass.

Pour passer les requêtes, Nginx doit savoir l'adresse que PHP-FPM écoute les requêtes FastCGI. L'adresse peut être un Socket Unix ou un Socket TCP et pour l'indentifier, il faut ouvrir la configuration de PHP-FPM.

Ouvre le fichier de configuration de PHP-FPM:

# Changer "8.1" avec votre propre version de PHP
sudo vim /etc/php/8.1/fpm/pool.d/www.conf

Le paramètre listen indique l'adresse et par défaut, il écoute via le Socket Unix:

listen = /run/php/php8.1-fpm.sock
# L'utilisateur et le group qui ont l'accès à la communication
listen.owner = www-data
listen.group = www-data

Pour configurer PHP-FPM d'écouter via le Socket TCP, il faut définir l'adresse IP et le port sur le paramètre listen.

# Écouter sur localhost port 9000
listen = 127.0.0.1:9000
# Seul le localhost peut connecter sur PHP-FPM
listen.allowed_clients = 127.0.0.1

Dans la configuration de Nginx:

location ~ \.php$ {
  # Nginx inclut un snippet prêt à utiliser pour définir les paramètres nécessaires pour php fastcgi.
  include /etc/nginx/snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php/php8.1-fpm.sock;
  # fastcgi_pass 127.0.0.1:9000;
}