Maison  >  Article  >  développement back-end  >  Comment fonctionnent nginx et php

Comment fonctionnent nginx et php

小云云
小云云original
2018-03-01 13:58:202780parcourir

Lorsque nginx reçoit une requête http, il trouve le serveur correspondant via le fichier de configuration. Faites ensuite correspondre tous les emplacements du serveur et trouvez la meilleure correspondance. Les commandes en place démarreront différents modules pour terminer le travail, tels que le module de réécriture et le module d'index. Par conséquent, les modules de nginx peuvent être considérés comme de véritables travailleurs. Le module nginx est compilé dans nginx de manière statique. Au démarrage de nginx, le module est automatiquement chargé. Contrairement à Apache, le module est compilé séparément dans un fichier so et le chargement ou non est spécifié dans le fichier de configuration. Par conséquent, en termes de chargement de modules uniquement, nginx est également plus rapide qu'Apache.

Alors, comment nginx appelle-t-il php ? Regardez d'abord la configuration de php dans nginx ci-dessous

location ~ \.php$ {
            root           /webpath;
            fastcgi_pass   127.0.0.1:9000;
            …
            ...
        }

Cette directive d'emplacement transmettra les requêtes avec php comme suffixe de fichier à 127.0.0.1:9000 pour traitement. Je pense que vous auriez dû deviner en voyant cela, c'est une question d'architecture C/S. L'adresse IP et le port ici (127.0.0.1:9000) sont l'adresse IP et le port écoutés par le processus fastcgi. fastcgi est une interface de communication évolutive et à haut débit entre les serveurs http et les langages de script dynamiques. Les serveurs http les plus populaires prennent en charge fastcgi, notamment Apache, nginx, lighttpd, etc. Dans le même temps, fastcgi est également pris en charge par de nombreux langages de script, dont PHP.

Alors, d'où viennent l'adresse IP et le port de configuration fastcgi ? Vous pouvez voir ce qui suit dans php-fpm.conf :

listen = 127.0.0.1:9000  #这个表示php的fastcgi进程监听的ip地址以及端口

pm.start_servers = 2
php-fpm作为fastcgi的进程管理器,可以有效控制内存和进程,并且平滑重载php配置。php5.3以后,php-fpm被集成到php的core中,默认安装,无须配置。

Le gestionnaire de processus fastcgi php-fpm s'initialise, démarre le processus principal php-fpm et démarre les sous-processus fastcgi start_servers. Le processus principal php-fpm gère principalement le sous-processus fastcgi, écoute le port 9000 et le sous-processus fastcgi attend les requêtes. Lorsque la demande du client atteint nginx, nginx transmet tous les fichiers avec php comme suffixe à 127.0.0.1:9000 pour traitement via la directive location. php-fpm sélectionne et se connecte à un processus enfant fastcgi et envoie des variables d'environnement et une entrée standard au processus enfant fastcgi. Une fois le traitement terminé, le sous-processus fastcgi renvoie une sortie standard et des informations sur les erreurs. Lorsque le processus enfant fastcgi ferme la connexion, la demande est traitée et attend le prochain traitement.

Le mode cgi normal est un processus, mais il y a un problème : chaque fois qu'une demande arrive, un processus doit être bifurqué, ce qui entraîne une efficacité lente

C'est pourquoi le fpm cgi rapide est gestionnaire cgi rapide
Le mode de fpm est aussi un processus, mais il va pré-forker, c'est-à-dire que lorsque le service démarre, il bifurque d'abord certains processus pour attendre le traitement des demandes.

Recommandations associées :

Démarrer, redémarrer, arrêter les scripts pour Nginx et PHP-FPM

Définir les limites de taille des fichiers de téléchargement nginx et PHP

Tutoriel sur l'installation de nginx et php_PHP sous mac

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn