Maison  >  Article  >  Opération et maintenance  >  Comment implémenter le mode d'accélération Nginx+PHP+FastCGI

Comment implémenter le mode d'accélération Nginx+PHP+FastCGI

WBOY
WBOYavant
2023-05-14 16:34:12796parcourir

1. Processus d'accès de l'utilisateur à la page Web PHP dynamique

Le navigateur de l'utilisateur initie l'accès à la page Web : http://192.168.1.103/index.php

L'utilisateur et le serveur nginx effectuent une négociation à trois pour la connexion TCP (en ignorant les politiques de contrôle d'accès, notamment la politique de contrôle d'accès nginx, le pare-feu nginx et les autres politiques de contrôle d'accès)

Étape 1 : L'utilisateur envoie la requête http au serveur nginx

Étape 2 : nginx jugera la requête en fonction de l'URI et du suffixe visités par l'utilisateur

1. Par exemple, si l'utilisateur accède à index.php, nginx le fera correspondre en fonction de l'emplacement dans le fichier de configuration, par exemple :

[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf  server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } }<br>

Si l'utilisateur accède à index.php, il correspondra à l'emplacement ~ .php$. Cela signifie que les ressources accessibles par l'utilisateur via l'URI correspondent en fonction de la taille et que les ressources accédées se terminent par .php.

Une fois que nginx correspond à l'emplacement spécifique en fonction de la ressource demandée par l'utilisateur, il exécutera l'action correspondant à l'emplacement. La signification de l'action dans l'emplacement est :

. include /etc/nginx/fastcgi_params; #Indique que nginx appellera l'interface fastcgi

fastcgi_intercept_errors on ; #Indique l'activation de l'interruption fastcgi et l'enregistrement des informations d'erreur

fastcgi_pass 127.0.0.1:9000; # Indique que nginx envoie les ressources demandées par l'utilisateur à 127.0.0.1:9000 pour analyse via fastcgi_pass. Les serveurs d'analyse de scripts nginx et php ici sont sur la même machine, donc 127.0.0.1:9000 représente. Il s'agit d'un serveur d'analyse de scripts php local.

Selon la configuration du serveur nginx, on peut voir que l'utilisateur accède aux ressources PHP dynamiques, et nginx appellera des programmes d'analyse de scripts liés à PHP pour analyser les ressources auxquelles l'utilisateur accède.

Étape 3 : Il ressort de la deuxième étape que l'utilisateur demande du contenu dynamique. nginx transmettra la demande au client fastcgi et enverra la demande de l'utilisateur à php-fpm via fastcgi_pass

. Si l'utilisateur accède à des ressources statiques, c'est simple, nginx renvoie directement les ressources statiques demandées par l'utilisateur à l'utilisateur.

Étape 4 : Après que fastcgi_pass ait remis les ressources dynamiques à php-fpm, php-fpm transférera les ressources vers le wrapper du serveur d'analyse de script php

Comment implémenter le mode daccélération Nginx+PHP+FastCGI

#🎜🎜 #

Comment implémenter le mode daccélération Nginx+PHP+FastCGI

Étape 5 : Une fois que le wrapper a reçu la requête transférée depuis php-fpm, le wrapper générera un nouveau thread pour appeler le serveur d'analyse du programme dynamique php

Si l'utilisateur demande à lire une base de données MySQL par exemple, l'opération de lecture de la base de données sera déclenchée ;

Si l'utilisateur demande des images/pièces jointes, etc., PHP déclenchera une requête vers le serveur de stockage principal tel qu'un cluster de stockage stocké via NFS ;

Étape 6 : PHP renverra les résultats de la requête à nginx

Étape 7 : nginx construit un message de réponse et renvoie le résultat à l'utilisateur

Ce n'est qu'un type de nginx. La demande de l'utilisateur et le retour du résultat de la demande de l'utilisateur sont effectués de manière asynchrone, c'est-à-dire que la ressource demandée par l'utilisateur est transférée dans nginx et que nginx peut la synchroniser, c'est-à-dire que la ressource analysée est renvoyée directement. par le serveur. Pour les utilisateurs, il n'est pas nécessaire d'effectuer un transfert dans nginx.

2. Questions connexes

1. Chaque demande d'utilisateur pour des ressources dynamiques doit-elle déclencher un processus complet d'analyse des ressources dynamiques ?

Non, il existe deux manières de résoudre ce problème :

Tout d'abord, activez la fonction de mise en cache de nginx lui-même pour mettre en cache les résultats de l'analyse des ressources dynamiques. La prochaine fois que l'utilisateur accédera à la ressource correspondante, nginx effectuera cette requête de cache si la requête réussit, la ressource statique après l'analyse de la ressource dynamique. être renvoyé directement aux utilisateurs ;

. Deuxièmement, déployez une machine de cache sur le backend nginx, par exemple en déployant un cluster de cache de vernis pour mettre en cache les ressources. Les ressources demandées par l'utilisateur peuvent d'abord être recherchées sur le cluster de cache

 ; 2. Est-il possible d'utiliser nginx pour la mise en cache ? Selon la situation réelle, si nginx n'est pas un goulot d'étranglement dans l'ensemble de l'architecture Web, nginx peut être utilisé pour la mise en cache, mais cela n'est pas recommandé car nginx est le seul moyen de répondre aux demandes des utilisateurs et aux demandes des utilisateurs. Si nginx apparaît un goulot d'étranglement, quelles que soient les performances des autres composants back-end tels que les clusters de stockage, il n'est pas recommandé d'activer la fonction de mise en cache de nginx dans le déploiement réel (lorsque nginx est utilisé comme serveur http). Parce que l'activation de la fonction de cache nginx réduira les performances de nginx et consommera les ressources matérielles du serveur correspondant sur lequel nginx est déployé.

3. Si vous utilisez une image pour représenter la relation entre nginx fastcgi wrapper php

Comment implémenter le mode daccélération Nginx+PHP+FastCGI

4.Qu'est-ce que fastcgi exactement

CGI signifie Common Gateway Interface Common Gateway Interface

Un outil utilisé pour la communication des services de programme sur les services HTTP doit être exécuté sur le serveur réseau.

La méthode d'interface CGI traditionnelle a des performances médiocres car chaque fois que le serveur HTTP rencontre un programme dynamique, il doit redémarrer l'analyseur pour effectuer l'analyse, puis les résultats sont renvoyés au serveur HTTP. C'est presque impossible lorsqu'il s'agit d'une concurrence élevée, c'est pourquoi FastCGI est né. De plus, la sécurité de la méthode d'interface CGI traditionnelle est également très mauvaise

一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口

接口在linux下是socket(这个socket可以是文件socket也可以是ip socket)

主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等

支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。

当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

5.具体的nginx + php的nginx相关配置

[email protected]:/data/web# cat /etc/nginx/nginx.conf|egrep -v "#|^$" user www-data; worker_processes 4; pid /var/run/nginx.pid; events {     worker_connections 768; } http {     sendfile on;     tcp_nopush on;     tcp_nodelay on;     keepalive_timeout 65;     types_hash_max_size 2048;     include /etc/nginx/mime.types;     default_type application/octet-stream;     access_log /var/log/nginx/access.log;     error_log /var/log/nginx/error.log;     gzip on;     gzip_disable "msie6";     include /etc/nginx/conf.d/*.conf;     include /etc/nginx/sites-enabled/*; } [email protected]:/data/web#<br>
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         #include /usr/local/etc/nginx/fastcgi.conf;         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } } [email protected]:/data/web#<br>

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