Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus

So implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus

WBOY
WBOYnach vorne
2023-05-14 16:34:12756Durchsuche

1. Zugriffsprozess des Benutzers auf dynamische PHP-Webseiten

Der Browser des Benutzers initiiert den Zugriff auf die Webseite: http://192.168.1.103/index.php

Der Benutzer und der Nginx-Server führen einen Drei-Wege-Handshake für die TCP-Verbindung durch (ignorieren Sie Zugriffskontrollrichtlinien, einschließlich Nginx-Zugriffskontrollrichtlinien, Nginx-Firewall und andere Zugriffskontrollrichtlinien)

Schritt 1: Der Benutzer sendet die http-Anfrage an den Nginx-Server

Schritt 2: Nginx beurteilt die Anfrage anhand des vom Benutzer besuchten URI und Suffix

1. Wenn der Benutzer beispielsweise auf index.php zugreift, gleicht Nginx diese anhand des Speicherorts in der Konfigurationsdatei ab, zum Beispiel:

[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>

Wenn der Benutzer auf index.php zugreift, wird der Speicherort ~ .php$ abgeglichen. Dies bedeutet, dass die Ressourcen, auf die der Benutzer über den URI zugreift, größenabhängig abgeglichen werden und die Ressourcen, auf die zugegriffen wird, mit .php enden.

Nachdem Nginx den spezifischen Standort entsprechend der vom Benutzer angeforderten Ressource abgeglichen hat, führt es die dem Standort entsprechende Aktion aus. Die Bedeutung der Aktion am Standort ist:

include /etc/nginx/fastcgi_params; #Zeigt an, dass Nginx die Fastcgi-Schnittstelle aufruft

fastcgi_intercept_errors on; #Zeigt an, dass die Fastcgi-Interrupt- und Fehlerinformationsaufzeichnung aktiviert ist

fastcgi_pass 127.0.0.1:9000; # Zeigt an, dass Nginx die vom Benutzer angeforderten Ressourcen zur Analyse über fastcgi_pass sendet Es handelt sich um einen lokalen PHP-Skript-Parsing-Server.

Anhand der Konfiguration des Nginx-Servers ist ersichtlich, dass der Benutzer auf dynamische PHP-Ressourcen zugreift und Nginx PHP-bezogene Skriptanalyseprogramme aufruft, um die vom Benutzer aufgerufenen Ressourcen zu analysieren.

Schritt 3: Wie aus dem zweiten Schritt hervorgeht, übergibt Nginx, der dynamische Inhalte anfordert, die Anfrage an den Fastcgi-Client und sendet die Anfrage des Benutzers über fastcgi_pass

an php-fpm Wenn der Benutzer auf statische Ressourcen zugreift, gibt nginx die vom Benutzer angeforderten statischen Ressourcen einfach direkt zurück.

Schritt 4: Nachdem fastcgi_pass die dynamischen Ressourcen an php-fpm übergeben hat, überträgt php-fpm die Ressourcen an den Wrapper des PHP-Skript-Parsing-Servers

So implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus

So implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus

Schritt 5: Nachdem der Wrapper die von PHP-FPM übertragene Anforderung empfangen hat, generiert der Wrapper einen neuen Thread, um den PHP-Server für die dynamische Programmanalyse aufzurufen

Wenn der Benutzer das Lesen einer MySQL-Datenbank usw. anfordert, wird der Datenbanklesevorgang ausgelöst;

Wenn der Benutzer Bilder/Anhänge usw. anfordert, löst PHP eine Abfrage an den Back-End-Speicherserver aus, z. B. einen über NFS gespeicherten Speichercluster;

Schritt 6: PHP gibt die Abfrageergebnisse an nginx zurück

Schritt 7: Nginx erstellt eine Antwortnachricht und gibt das Ergebnis an den Benutzer zurück

Dies ist nur eine Art von Nginx. Die Anforderung des Benutzers und die Rückgabe des Anforderungsergebnisses werden asynchron ausgeführt, dh die vom Benutzer angeforderte Ressource kann in Nginx synchronisiert werden, dh die analysierte Ressource wird direkt zurückgegeben Durch den Server ist keine Übertragung in Nginx erforderlich.

2. Verwandte Fragen

1. Muss jede Benutzeranforderung nach dynamischen Ressourcen einen vollständigen Parsing-Prozess für dynamische Ressourcen auslösen?

Nein, es gibt zwei Möglichkeiten, dieses Problem zu lösen:

Aktivieren Sie zunächst die Caching-Funktion von Nginx selbst, um die Ergebnisse der dynamischen Ressourcenanalyse zwischenzuspeichern. Wenn der Benutzer das nächste Mal auf die entsprechende Ressource zugreift, führt Nginx diese Cache-Abfrage durch. Wenn die Abfrage erfolgreich ist, wird die statische Ressource analysiert direkt an Benutzer zurückgegeben werden;

Zweitens stellen Sie einen Cache-Computer auf dem Nginx-Backend bereit, z. B. einen Lack-Cache-Cluster, um Ressourcen zwischenzuspeichern. Die vom Benutzer angeforderten Ressourcen können zuerst im Cache-Cluster durchsucht werden 2. Ist es möglich, Nginx zum Caching zu verwenden? Abhängig von der tatsächlichen Situation kann Nginx zum Zwischenspeichern verwendet werden, wenn Nginx kein Engpass in der gesamten Webarchitektur darstellt. Dies wird jedoch nicht empfohlen, da Nginx die einzige Möglichkeit für Benutzeranfragen und Antworten auf Benutzeranfragen ist. Unabhängig davon, wie gut die Leistung anderer Back-End-Komponenten wie Speichercluster ist, wird nicht empfohlen, die Caching-Funktion von Nginx in der tatsächlichen Bereitstellung zu aktivieren (wenn Nginx als http-Server verwendet wird). Denn durch die Aktivierung der Nginx-Cache-Funktion wird die Nginx-Leistung verringert und die Hardwareressourcen des entsprechenden Servers verbraucht, auf dem Nginx bereitgestellt wird.

3. Wenn Sie ein Bild verwenden, um die Beziehung zwischen Nginx FastCGI Wrapper PHP darzustellen

So implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus 4.Was genau ist fastcgi

? CGI steht für Common Gateway Interface

Auf dem Netzwerkserver muss ein Tool zur Programmdienstkommunikation für CGI-Programme ausgeführt werden.

Die herkömmliche CGI-Schnittstellenmethode weist eine schlechte Leistung auf, da der HTTP-Server jedes Mal, wenn er auf ein dynamisches Programm trifft, den Parser neu starten muss, um die Analyse durchzuführen, und die Ergebnisse dann an den HTTP-Server zurückgegeben werden. Dies ist bei hoher Parallelität nahezu unmöglich, daher wurde FastCGI geboren. Darüber hinaus ist auch die Sicherheit der herkömmlichen CGI-Schnittstellenmethode sehr schlecht

一个可伸缩地。高速地在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>

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Nginx+PHP+FastCGI-Beschleunigungsmodus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen