Maison  >  Article  >  développement back-end  >  Pour communiquer entre nginx et php-fpm, utilisez un socket Unix ou TCP ?

Pour communiquer entre nginx et php-fpm, utilisez un socket Unix ou TCP ?

藏色散人
藏色散人avant
2019-12-31 13:28:344660parcourir

Avant-propos

Il existe deux méthodes de communication entre nginx et fastcgi, l'une est la méthode TCP et l'autre est la méthode socket Unix. Les deux méthodes ont leurs propres avantages et inconvénients. Voici d'abord deux méthodes de configuration, puis résumons les performances, la sécurité, etc.

TCP utilise le port TCP pour se connecter 127.0.0.1:9000

Socket utilise le socket de domaine Unix pour se connecter au socket /dev/shm/PHP-cgi.sock (de nombreux tutoriels utilisent le chemin /tmp , et le chemin /dev/shm est tmpfs, ce qui est beaucoup plus rapide que le disque). Lorsque la pression du serveur n'est pas élevée, il n'y a pas beaucoup de différence entre tcp et socket, mais lorsque la pression est relativement élevée, la méthode socket a un réel effet. Mieux.

Guide de configuration

1. Méthode de configuration TCP

La configuration de la communication TCP est très simple et peut être effectuée en trois étapes.

Première étape, modifiez /etc/nginx/conf.d/le fichier de configuration de votre site (si vous utilisez le fichier de configuration par défaut, modifiez /etc/nginx/sites-available/default)

Modifier le paramètre fastcgi_pass à 127.0.0.1:9000, comme ceci :

location ~ \.php$ {
      index index.php index.html index.htm;
      include /etc/nginx/fastcgi_params;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi_params;
 }

La deuxième étape consiste à éditer le fichier de configuration php-fpm /etc/php5/fpm/pool.d/www.conf

Changez le paramètre d'écoute en 127.0.0.1:9000, comme ceci :

listen=127.0.0.1:9000

La troisième étape, redémarrez php-fpm, redémarrez nginx

2. 🎜 >

Le socket Unix devrait en fait être appelé socket de domaine Unix au sens strict. Il s'agit d'une méthode largement utilisée de communication inter-processus (IPC) dans les systèmes *nix. Les fichiers (généralement .sock) sont utilisés comme. le seul socket. Identifiant (descripteur), deux processus qui doivent communiquer peuvent établir un canal de communication en référençant le même fichier de descripteur de socket.

Le socket de domaine Unix ou socket IPC est un terminal qui permet à deux ou plusieurs processus sur le même système d'exploitation de communiquer des données. Contrairement aux canaux, les sockets de domaine Unix peuvent utiliser à la fois des flux d'octets et des files d'attente de données, tandis que la communication par canal ne peut s'effectuer que via des flux d'octets. L'interface des sockets de domaine Unix est très similaire à celle des sockets Internet, mais elle n'utilise pas le protocole réseau sous-jacent pour communiquer. La fonction du socket de domaine Unix est un composant du système d'exploitation POSIX. Les sockets de domaine Unix utilisent l'adresse d'un fichier système comme identité. Il peut être référencé par les processus système. Ainsi, deux processus peuvent ouvrir un socket de domaine Unix en même temps pour communiquer. Cependant, cette méthode de communication se produit dans le noyau du système et ne se propage pas dans le réseau.

La configuration nécessite cinq étapes

La première étape consiste à déterminer l'emplacement de stockage de votre fichier de descripteur de socket.

peut être placé n'importe où dans le système. Si vous souhaitez une vitesse de communication plus rapide, vous pouvez le placer sous /dev/shm. Ce répertoire est ce qu'on appelle tmpfs, qui est une zone qui peut être utilisée directement par. RAM Par conséquent, lisez La vitesse d’écriture sera très rapide.

Après avoir décidé de l'emplacement du fichier, vous devez modifier les autorisations du fichier. Laissez nginx et php-fpm avoir les autorisations de lecture et d'écriture dessus. Vous pouvez faire ceci :

sudo touch /dev/shm/fpm-cgi.sock
sudo chown www-data:www-data /dev/shm/fpm-cgi.sock
sudo chmod 666 /dev/shm/fpm-cgi.sock

La seconde. L'étape consiste à modifier le fichier de configuration php-fpm /etc/php5/fpm/pool.d/www.conf

Changez le paramètre d'écoute en /dev/shm/fpm-cgi.sock, comme ceci :

listen=/dev/shm/fpm-cgi.sock

Changez le paramètre Listen.backlog sur -1. Le backlog de mémoire est infini. La valeur par défaut est 128. Si la concurrence est élevée, une erreur sera signalée

 ; Set listen(2) backlog. A value of '-1' means unlimited.
 ; Default Value: 128 (-1 on FreeBSD and OpenBSD)
 listen.backlog = -1

La troisième étape consiste à modifier. le fichier de configuration du site nginx

Modifiez le paramètre fastcgi_pass en unix:/dev/shm/fpm-cgi.sock, comme ceci :

location~\.php${
      indexindex.phpindex.htmlindex.htm;
      include/etc/nginx/fastcgi_params;
      fastcgi_passunix:/dev/shm/fpm-cgi.sock;
      fastcgi_indexindex.php;
      includefastcgi_params;
}

La quatrième étape consiste à modifier le fichier /etc/sysctl Fichier .conf pour augmenter le nombre de connexions simultanées au niveau du noyau

sudo echo'net.core.somaxconn = 2048'>>/etc/sysctl.conf
sudo sysctl-p

La cinquième étape, redémarrez les services nginx et php-fpm (il est préférable de redémarrer php-fpm d'abord puis de redémarrer nginx)

ps : Si nginx effectue un équilibrage de charge, ne considérez pas du tout le socket Unix. Le seul moyen est d'utiliser TCP.

Pour plus de connaissances sur PHP, veuillez visiter le

Tutoriel PHP !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer