Maison > Article > développement back-end > Le mécanisme de fonctionnement et les principes entre PHP et nginx
Nginx ("moteur x") est un haut- serveur HTTP et proxy inverse performant, également un serveur IMAP/POP3/SMTP.
Les premiers serveurs Web ne traitaient que le HTML, etc. Des fichiers statiques, mais avec le développement de la technologie, des langages dynamiques comme php sont apparus.
Le serveur Web ne peut pas le gérer, que dois-je faire ? Alors laissez l’interpréteur php s’en occuper !
Laisser le soin à l'interpréteur PHP, c'est bien, mais comment l'interpréteur PHP communique-t-il avec le serveur Web ?
Afin de résoudre le problème de communication entre les différents interpréteurs de langage (tels que les interpréteurs php, python) et le serveur Web, le protocole cgi est apparu. Tant que vous écrivez un programme selon le protocole cgi, vous pouvez établir une communication entre l'interprète de langage et le serveur Web. Tel que le programme php-cgi.
Avec le protocole cgi, le problème de communication entre l'interpréteur php et le serveur web est résolu, et le serveur web peut enfin gérer des langages dynamiques.
Cependant, chaque fois que le serveur Web reçoit une requête, il lancera un processus cgi, puis tuera le processus une fois la requête terminée. S'il y a 10 000 requêtes, le processus php-cgi doit être bifurqué et tué 10 000 fois.
Avez-vous déjà trouvé que c'était un gaspillage de ressources ?
En conséquence, une version améliorée de cgi, fast-cgi, est apparue. Une fois que fast-cgi a traité une requête à chaque fois, il ne tuera pas le processus, mais le conservera afin qu'il puisse gérer plusieurs requêtes à la fois. De cette façon, il n’est pas nécessaire de relancer un processus à chaque fois, ce qui améliore considérablement l’efficacité.
php-fpm est php-Fastcgi Process Manager.
php-fpm est l'implémentation de FastCGI et fournit des fonctions de gestion de processus.
Le processus comprend deux types de processus : le processus maître et le processus travailleur.
Il n'y a qu'un seul processus maître, qui est chargé d'écouter le port et de recevoir les requêtes du serveur Web, alors qu'il existe généralement plusieurs processus de travail (le nombre spécifique est configuré en fonction des besoins réels). interprète intégré à l'intérieur, qui est PHP où le code s'exécute réellement.
Nous savons que Nginx a non seulement pour fonction de traiter les requêtes http, mais peut également faire du proxy inverse.
Nginx transmet donc les requêtes dynamiques au backend Php-fpm via la fonction de proxy inverse.
Configurons un nouveau Nginx+Php-fpm
Entrez dans le répertoire nginx et modifiez le fichier nginx.conf.
Comme le montre la figure, dans la dernière ligne de nginx.conf, ajoutez le fichier include
à entrez le chemin d'inclusion ci-dessus et ajoutez un serveur.
Expliquons la signification des éléments de configuration :
server { listen 80; #监听80端口,接收http请求 server_name www.example.com; #就是网站地址 root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径 #路由到网站根目录www.example.com时候的处理 location / { index index.php; #跳转到www.example.com/index.php autoindex on; } #当请求网站下php文件的时候,反向代理到php-fpm location ~ \.php$ { include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块 fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口 } }
En bref : lorsque nous accédons à When www.example.com, le flux de traitement est le suivant :
www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 | | www.example.com/index.php请求到达127.0.0.1:9000 | | 等待处理。。。
Ensuite, nous activons php -fpm de php pour gérer cette requête
Ouvrez le fichier php-fpm.conf, on voit la configuration suivante :
C'est à dire : le php- Le module fpm écoute le port 127.0.0.1:9000, en attente. Les requêtes arrivent et sont traitées.
La combinaison de nginx et php-fpm, le processus complet est comme ceci.
nginx与php-fpm的结合,完整的流程是这样的。 www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 . | | www.example.com/index.php请求到达127.0.0.1:9000 | | php-fpm 监听127.0.0.1:9000 | | php-fpm 接收到请求,启用worker进程处理请求 | | php-fpm 处理完请求,返回给nginx | | nginx将结果通过http返回给浏览器
Démarrez avec succès, nous vérifions le processus php-fpm
Comme indiqué ci-dessus, il existe un processus maître et 3 processus de travail.
Nous modifions le fichier comme indiqué ci-dessous :
【Tutoriels associés : Tutoriel vidéo 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!