NGINX le serveur Web (en tant que proxy inverse) sert les applications PHP via le FastCGI protocole (en tant que serveur d'application principal). NGINX emploie PHP-FPM (FastCGI Process Manager), une alternative à PHP FastCGI implémentation qui s'exécute en arrière-plan en tant que démon, écoutant CGI demandes. Il est livré avec des fonctionnalités supplémentaires conçues pour alimenter des sites Web ou des applications Web très chargés, mais il peut être utilisé pour des sites de toute taille.
Non seulement PHP-FPM prend en charge la configuration de FastCGI pools de ressources, mais il améliore également de nombreux éléments de FastCGI internes et augmente les rapports d'erreurs, l'arrêt des scripts et bien plus encore. Il comprend la démonisation PHP, la gestion des processus, le nombre dynamique de processus à partir desquels les requêtes peuvent provenir, l'en-tête d'erreur, la prise en charge du téléchargement accéléré, etc.
Pour accepter FastCGI demandes de NGINX , PHP-FPM peut soit écouter sur un TCP/IP socket ou socket de domaine UNIX. Quelle que soit l'adresse que vous choisissez d'utiliser, c'est ce que NGINX utilise pour se connecter (requêtes proxy) à PHP-FPM , en utilisant le fastcgi_pass
directives.
Ce guide explique comment configurer NGINX au serveur d'applications PHP à l'aide de PHP-FPM . Il décrit quand utiliser un TCP/IP socket ou socket de domaine UNIX pour connecter NGINX vers PHP-FPM et pourquoi.
Ce guide suppose que vous avez NGINX et PHP-FPM installé sur votre système Linux, sinon, voir :
- Comment installer le serveur LEMP sur CentOS 8
- Comment installer la pile LEMP PhpMyAdmin dans le serveur Ubuntu 20.04
- Comment installer NGINX, MySQL/MariaDB et PHP sur RHEL 8
- Comment installer LEMP sur le serveur Debian 10
Que dois-je utiliser :socket de domaine UNIX ou socket TCP/IP ?
UNIX domaine (ou IPC ) les sockets sont un moyen de communication inter-processus (IPC) qui permet un échange de données efficace entre les processus s'exécutant sur le même système d'exploitation tandis que TCP/IP (ou Domaine Internet ) les sockets permettent aux processus de communiquer sur un réseau.
Contrairement à un TCP/IP socket qui identifie un serveur par une adresse IP et un port (par exemple 127.0.0.1:9000 ), vous pouvez lier un serveur à un socket de domaine UNIX en utilisant un chemin de fichier (par exemple /run/php-fpm/www.sock ), qui est visible dans le système de fichiers.
Un socket de domaine UNIX est un type spécial de fichier - les autorisations de fichier et de répertoire s'y appliquent (comme c'est le cas avec tout autre type de fichier UNIX) et peuvent être utilisées pour restreindre les processus sur l'hôte qui peuvent lire et écrire dans le fichier, (et ainsi communiquer avec le serveur backend).
De cette façon, un socket de domaine UNIX est sécurisé car seuls les processus sur l'hôte local peuvent l'utiliser. Un TCP/IP socket peut être exposé à Internet, ce qui présente un risque pour la sécurité, à moins que des mesures de sécurité supplémentaires telles qu'un pare-feu ne soient mises en œuvre.
Surtout, en utilisant un UNIX domaine socket n'est pas la même chose que d'utiliser un TCP/IP socket en ce qui concerne les performances, plusieurs tests et benchmarks ont prouvé que les sockets de domaine UNIX étaient plus rapides. Le principal inconvénient des sockets de domaine UNIX est qu'ils sont moins évolutifs, ils ne prennent en charge que la communication inter-processus au sein du même système d'exploitation (OS).
Où puis-je configurer l'adresse d'écoute PHP-FPM ?
Vous pouvez configurer l'adresse PHP-FPM écoute dans un fichier de configuration de pool de ressources. Notez qu'avec PHP-FPM , vous pouvez exécuter plusieurs pools de processus avec des paramètres différents. Le pool par défaut s'appelle www
.
L'emplacement du fichier de configuration du pool de ressources dépend de la manière dont PHP et PHP-FPM sont installés sur un système Linux (qu'il s'agisse d'une version par défaut/unique ou de plusieurs versions simultanément).
Par exemple, sur CentOS 8 , avec une seule version, tous les fichiers de configuration PHP sont situés dans le répertoire /etc
répertoire et le répertoire PHP-FPM par défaut piscine (www)
le fichier de configuration est /etc/php-fpm.d/www.conf :
Pour lister tous les fichiers de configuration PHP, utilisez la commande ls suivante.
# ls /etc/php*
Lister tous les fichiers de configuration PHP
Sur Ubuntu 20.04 , les fichiers de configuration PHP se trouvent dans le répertoire /etc/php/<php-version>/
répertoire et le répertoire PHP-FPM par défaut piscine (www)
le fichier de configuration est /etc/php/<php-version>/fpm/pool.d/www.conf
:
$ ls /etc/php/7.4/
Lister tous les fichiers de configuration PHP sur Ubuntu
Configuration de PHP-FPM pour écouter sur un socket de domaine UNIX
Pour configurer PHP-FPM pour écouter sur un socket de domaine UNIX, ouvrez votre PHP-FPM par défaut fichier de configuration du pool, en utilisant votre éditeur de texte préféré.
# vim /etc/php-fpm.d/www.conf #Ubuntu/Debian OR $ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #CentOS/RHEL/Fedora
Recherchez ensuite la directive listen et définissez-la sur le chemin d'accès au fichier du socket de domaine UNIX comme suit. Notez que la plupart des installations utilisent par défaut un socket de domaine UNIX.
listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian OR listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora
Si vous utilisez un socket de domaine UNIX, vous devez également définir les autorisations de lecture/écriture appropriées pour le fichier, afin d'autoriser les connexions à partir du serveur Web NGINX. Par défaut, NGINX s'exécute en tant qu'utilisateur et groupe nginx sur CentOS/RHEL/Fedora et www-data sur Ubuntu et Debian .
Alors, trouvez le listen.owner
et listen.group
paramètres et réglez-les en conséquence. Réglez également le mode sur 0660 en utilisant le listen.mode
paramètre.
------------- On Debian and Ubuntu ------------- listen.owner = www-data listen.group = www-data listen.mode = 0660 ------------- On CentOS/RHEL and Fedora ------------- listen.owner = nginx listen.group = nginx listen.mode = 0660
Notez que si les autorisations sur le fichier de socket de domaine UNIX ne sont pas définies correctement, NGINX peut renvoyer une erreur de passerelle incorrecte.
Configuration PHP-FPM
Configuration de PHP-FPM pour écouter sur un socket TCP/IP
Bien qu'un socket de domaine UNIX soit plus rapide qu'un socket TCP/IP, le premier est moins évolutif, car il ne peut prendre en charge la communication inter-processus que sur le même système d'exploitation. Si NGINX et le serveur d'application principal (PHP-FPM ) s'exécutent sur des systèmes différents, vous devrez configurer PHP-FPM pour écouter sur un socket TCP/IP les connexions.
Dans le PHP-FPM fichier de configuration du pool, définissez le listen
adresse comme suit. Assurez-vous que le port que vous avez choisi n'est pas utilisé par un autre processus ou service sur le même système.
listen = 127.0.0.1:3000
Configuration PHP-FPM pour le socket TCP
Configuration de NGINX pour qu'il fonctionne avec le serveur d'applications PHP-FPM
Une fois que vous avez configuré l'adresse PHP-FPM écoute, vous devez configurer NGINX pour lui envoyer une requête proxy via cette adresse, en utilisant le fastcgi_pass
paramètre de configuration, dans un fichier de configuration de bloc de serveur virtuel.
Par exemple, si le fichier de configuration de votre site Web est /etc/nginx/conf.d/example.com.conf , ouvrez-le pour le modifier.
# vim /etc/nginx/conf.d/example.com.conf
Recherchez le location
bloc pour le traitement .php
fichiers et définissez le fastcgi_pass
paramètre comme suit, si vous avez configuré PHP-FPM pour écouter sur un socket de domaine UNIX.
fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian OR fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora
Connectez Nginx à PHP-FPM à l'aide d'un socket Unix
Ou utilisez un TCP/IP adresse si vous avez configuré PHP-FPM pour écouter sur un TCP/IP prise. Si le serveur d'application principal (PHP-FPM ) s'exécute sur un serveur distinct (remplace 10.42.0.10 avec l'adresse IP de la machine sur laquelle tourne le serveur PHP-FPM FastCGI).
fastcgi_pass 10.42.0.10:3000;
Connectez Nginx à PHP-FPM à l'aide du socket TCP
Vous pouvez apporter des modifications ici en fonction de l'adresse PHP-FPM est configuré pour écouter, dans le fichier de configuration du pool. La configuration par défaut pointe vers un socket de domaine UNIX.
upstream php-fpm { server unix:/run/php-fpm/www.sock; }
Configurer le serveur PHP en amont dans Nginx
et dans le fichier de blocage du serveur de votre site, définissez simplement le fastcgi_pass
paramètre comme indiqué.
fastcgi_pass php-fpm;
Configurer Nginx sur le serveur en amont PHP-FPM
Après avoir apporté des modifications au PHP-FPM et NGINX configurations, vérifiez l'exactitude de leur syntaxe de configuration comme suit.
------------- On Debian and Ubuntu ------------- $ sudo php-fpm -t $ sudo nginx -t ------------- On CentOS/RHEL and Fedora ------------- # php-fpm -t # nginx -t
Alors que la sortie de la commande affiche uniquement le fichier de configuration principal, tous les autres fichiers de configuration sont également inclus et vérifiés.
Vérifier la configuration Nginx et PHP-FPM
Ensuite, vous devez redémarrer les deux services pour appliquer les modifications, à l'aide de la commande systemctl.
------------- On Debian and Ubuntu ------------- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ------------- On CentOS/RHEL and Fedora ------------- # systemctl restart nginx # systemctl restart php-fpm
Si vous obtenez des erreurs, vous pouvez vérifier le NGINX et PHP-FPM fichiers journaux à l'aide de la commande cat.
------------- On Debian and Ubuntu ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php7.4-fpm.log ------------- On CentOS/RHEL and Fedora ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php-fpm/www-error.log
C'est tout ce que nous avions pour vous. La section des commentaires ci-dessous peut être utilisée pour poser des questions. Pour plus d'informations, consultez la documentation NGINX et la documentation PHP-FPM.
Partager c'est aimer…Partager sur FacebookPartager sur TwitterPartager sur LinkedinPartager sur Reddit