Comment connecter Nginx à PHP-FPM à l'aide de la prise UNIX ou TCP / IP

Comment connecter Nginx à PHP-FPM à l'aide de la prise UNIX ou TCP / IP

Nginx Le serveur Web (en tant que proxy inversé) dessert les applications PHP via le Fastcgi protocole (en tant que serveur d'applications backend). Nginx Employs Php-fpm (FastCGI Process Manager), une alternative Php fastcgi implémentation qui s'exécute en arrière-plan comme un démon, écoutant CGI demandes. Il est livré avec des fonctionnalités supplémentaires conçues pour alimenter les sites Web à charge lourds ou les applications Web, mais il peut être utilisé pour des sites de toute taille.

Non seulement Php-fpm prendre en charge la configuration de Fastcgi Pools de ressources, mais il améliore également bon nombre des Fastcgi internes et augmente les rapports d'erreurs, la terminaison de script et bien plus encore. Il dispose d'une diabolisation PHP, d'une gestion des processus, d'un nombre dynamique de processus à partir desquels les demandes peuvent venir, de l'en-tête d'erreur, une prise en charge de téléchargement accélérée, et plus.

Accepter Fastcgi demandes de Nginx, Php-fpm peut écouter sur un TCP / IP douille de domaine ou Unix. Quelle que soit l'adresse que vous choisissez d'utiliser Nginx utilise pour se connecter (demandes proxy) à Php-fpm, en utilisant le fastcgi_pass directif.

Ce guide explique comment configurer Nginx pour server les applications PHP en utilisant Php-fpm. Il décrit quand utiliser un TCP / IP douille de domaine ou Unix pour se connecter Nginx pour 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 le lemp pile phpmyadmin dans Ubuntu 20.04 serveur
  • Comment installer nginx, mysql / mariaDB et php sur rhel 8
  • Comment installer Lemp sur Debian 10 Server

Que dois-je utiliser: prise de domaine Unix ou prise TCP / IP?

Unix domaine (ou IPC TCP / IP (ou Domaine Internet) Les prises permettent des processus pour communiquer sur un réseau.

Contrairement à un TCP / IP prise qui identifie un serveur par une adresse IP et un port (E.g 127.0.0.1: 9000), vous pouvez lier un serveur à une prise de domaine UNIX à l'aide d'un nom de fichier (e.g / run / php-fpm / www.chaussette), qui est visible dans le système de fichiers.

Une prise de domaine UNIX est un type spécial de fichier - les autorisations de fichiers et de répertoires s'y appliquent (comme c'est le cas avec tout autre type de fichier UNIX) et peut être utilisé pour restreindre les processus de l'hôte et d'écrire dans le fichier, (et donc communiquer avec le serveur backend).

De cette façon, une prise de domaine Unix est sécurisée car seuls les processus sur l'hôte local peuvent l'utiliser. UN TCP / IP La prise peut être exposée à Internet posant un risque de 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 La prise de domaine n'est pas la même chose que l'utilisation d'un TCP / IP Prise concernant les performances, plusieurs tests et repères ont prouvé que les prises de domaine Unix sont plus rapides. L'inconvénient principal des sockets de domaine UNIX est qu'ils sont moins évolutifs, ils ne prennent en charge que la communication interprète dans le 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 différents paramètres. Le pool par défaut est appelé www.

L'emplacement du fichier de configuration du pool de ressources dépend du chemin 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 /etc répertoire et par défaut Php-fpm piscine (www) Le fichier de configuration est / etc / php-fpm.d / www.confli:

Pour répertorier tous les fichiers de configuration PHP, utilisez la commande LS suivante.

# ls / etc / php * 
Liste tous les fichiers de configuration PHP

Sur Ubuntu 20.04, Les fichiers de configuration PHP sont situés dans le / etc / php // répertoire et par défaut Php-fpm piscine (www) Le fichier de configuration est / etc / php // fpm / pool.d / www.confli:

$ ls / etc / php / 7.4 / 
Répertoriez tous les fichiers de configuration PHP sur Ubuntu

Configuration de PHP-FPM pour écouter sur une prise de domaine Unix

Configurer Php-fpm Pour écouter sur une prise de domaine Unix, ouvrez votre défaut Php-fpm Fichier de configuration du pool, en utilisant votre éditeur de texte préféré.

$ sudo vim / etc / php / 7.4 / FPM / Pool.d / www.conf # ubuntu / debian ou # vim / etc / php-fpm.d / www.Conf # Centos / Rhel / Fedora 

Ensuite, recherchez la directive d'écoute et définissez-la sur le nom du fichier de la prise de domaine Unix comme suit. Notez que la plupart des installations utilisent une prise de domaine Unix par défaut.

écouter = / run / php / php7.4-FPM.chaussette # ubuntu / debian ou écouter = / run / php-fpm / www.chaussette # centos / rhel / fedora 

Si vous utilisez une prise de domaine UNIX, vous devez également définir les autorisations de lecture / écriture appropriées pour le fichier, pour 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 écouter.propriétaire et écouter.groupe paramètres et définissez-les en conséquence. Configurez également le mode sur 0660 en utilisant le écouter.mode paramètre.

------------- Sur Debian et Ubuntu ------------- écouter.propriétaire = www-data écouter.groupe = www-data écouter.mode = 0660 ------------- Sur Centos / Rhel et Fedora ------------- écouter.propriétaire = nginx écouter.groupe = nginx écouter.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 mauvaise erreur de passerelle.

Configuration PHP-FPM

Configuration de PHP-FPM pour écouter sur une prise TCP / IP

Bien qu'une prise de domaine UNIX soit plus rapide qu'une prise TCP / IP, la première est moins évolutive, car elle ne peut prendre en charge la communication interprète sur le même système d'exploitation. Si Nginx et le serveur d'applications backend (Php-fpm) fonctionnent sur différents systèmes, vous devrez configurer Php-fpm Pour écouter sur une prise TCP / IP pour les connexions.

Dans le Php-fpm Fichier de configuration du pool, définissez le écouter 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.

Écouter = 127.0.0.1: 3000 
Configuration PHP-FPM pour la prise TCP

Configuration de Nginx pour travailler avec PHP-FPM Application Server

Une fois que vous avez configuré l'adresse Php-fpm écouter, vous devez configurer Nginx pour lui demander par procuration 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 / confre.d / exemple.com.confli, Ouvrez-le à l'édition.

# vim / etc / nginx / confr.d / exemple.com.confli 

Cherchez le emplacement 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 une prise de domaine Unix.

fastcgi_pass Unix: / run / php / php7.4-FPM.chaussette # ubuntu / debian ou rapide.chaussette # centos / rhel / fedora 
Connectez Nginx à PHP-FPM à l'aide de Socket Unix

Ou utilisez un TCP / IP Adresse si vous avez configuré Php-fpm écouter sur un TCP / IP prise. Si le serveur d'applications backend (Php-fpm) est en cours d'exécution sur un serveur séparé (remplacer dix.42.0.dix avec l'adresse IP de la machine sur laquelle le serveur PHP-FPM FastCGI s'exécute).

fastcgi_pass 10.42.0.10: 3000; 
Connectez Nginx à PHP-FPM à l'aide de la prise TCP

Important: Sur Centos 8, Php-fpm est défini comme un serveur en amont dans le / etc / nginx / confre.d / php-fpm.confli fichier, dans un bloc en amont, avec le nom php-fpm.

Vous pouvez apporter des modifications ici en conséquence 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 une prise de domaine Unix.

en amont php-fpm server unix: / run / php-fpm / www.chaussette;  
Configurer le serveur en amont PHP dans Nginx

Et dans le fichier de blocs de serveur de votre site, définissez simplement le fastcgi_pass paramètre comme indiqué.

fastcgi_pass php-fpm; 
Configurer le serveur en amont Nginx vers PHP-FPM

Après avoir apporté des modifications au Php-fpm et Nginx Configurations, vérifiez leur syntaxe de configuration pour l'exactitude comme suit.

------------- Sur Debian et Ubuntu ------------- $ sudo php-fpm -t $ sudo nginx -t ------------- Sur Centos / Rhel et Fedora ------------- # php-fpm -t # nginx -t 

Alors que la sortie de commande affiche uniquement le fichier de configuration principale, tous les autres fichiers de configuration sont inclus et vérifiés également.

Vérifiez la configuration de Nginx et PHP-FPM

Ensuite, vous devez redémarrer les deux services pour appliquer les modifications, en utilisant la commande SystemCTL.

------------- Sur Debian et Ubuntu ------------- $ sudo systemctl redémarrer nginx $ sudo systemctl redémarrer php7.4-FPM ------------- Sur Centos / Rhel et Fedora ------------- # systemctl redémarrer nginx # systemctl redémarrer php-fpm 

Si vous obtenez des erreurs, vous pouvez vérifier le Nginx et Php-fpm Fichiers journaux à l'aide de la commande CAT.

------------- Sur Debian et Ubuntu ------------- $ cat / var / log / nginx / erreur.log $ cat / var / log / php7.4-FPM.enregistrer ------------- Sur Centos / Rhel et Fedora ------------- $ cat / var / log / nginx / erreur.log $ cat / var / log / php-fpm / www-error.enregistrer 

C'est tout ce que nous avions pour toi. 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.