GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment connecter NGINX à PHP-FPM à l'aide d'UNIX ou d'un socket TCP/IP

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

Important  :Sur CentOS 8 , PHP-FPM est défini comme un serveur en amont dans /etc/nginx/conf.d/php-fpm.conf fichier, dans un bloc en amont, avec le nom php-fpm .

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
Ubuntu
  1. Comment installer WordPress avec Nginx sur Ubuntu 18.04

  2. Comment rediriger les URL avec Nginx

  3. Ssh - Comment se connecter à un PC via un autre PC en utilisant Ssh ?

  4. Comment activer Nginx avec PHP-FPM sur Plesk

  5. Socket Unix vs hôte TCP/IP:port

Comment basculer l'écoute PHP-FPM sur le socket Unix

Comment installer Nginx avec PHP-FPM sur Debian 11

Comment connecter NGINX à PHP-FPM à l'aide d'UNIX ou d'un socket TCP/IP

Comment installer WordPress en utilisant Nginx dans Ubuntu Linux

Comment configurer PHP-FPM avec NGINX

Comment se connecter à MySQL en utilisant PHP