Nginx („Engine x“) ist eine High- leistungsstarker HTTP- und Reverse-Proxy-Server, außerdem ein IMAP/POP3/SMTP-Server.
Frühe Webserver verarbeiteten nur HTML, usw. Statische Dateien, aber mit der Entwicklung der Technologie sind dynamische Sprachen wie PHP aufgetaucht.
Der Webserver kann damit nicht umgehen, was soll ich tun? Dann überlassen Sie es dem PHP-Interpreter!
Es ist in Ordnung, es dem PHP-Interpreter zu überlassen, aber wie kommuniziert der PHP-Interpreter mit dem Webserver?
Um das Kommunikationsproblem zwischen verschiedenen Sprachinterpretern (z. B. PHP-, Python-Interpretern) und dem Webserver zu lösen, erschien das CGI-Protokoll. Solange Sie ein Programm gemäß dem CGI-Protokoll schreiben, können Sie eine Kommunikation zwischen dem Sprachinterpreter und dem Webwerver erreichen. Wie zum Beispiel ein PHP-CGI-Programm.
Mit dem CGI-Protokoll wird das Problem der Kommunikation zwischen dem PHP-Interpreter und dem Webserver gelöst und der Webserver kann endlich dynamische Sprachen verarbeiten.
Jedes Mal, wenn der Webserver eine Anfrage erhält, wird er jedoch einen CGI-Prozess forken und den Prozess dann beenden, nachdem die Anfrage abgeschlossen ist. Bei 10.000 Anfragen muss der PHP-CGI-Prozess 10.000 Mal geforkt und beendet werden.
Haben Sie schon einmal festgestellt, dass es eine Verschwendung von Ressourcen ist?
Als Ergebnis erschien eine verbesserte Version von CGI, Fast-CGI. Nachdem jede Anforderung von fast-cgi verarbeitet wurde, wird der Prozess nicht beendet, sondern beibehalten, sodass der Prozess mehrere Anforderungen gleichzeitig verarbeiten kann. Auf diese Weise ist es nicht erforderlich, einen Prozess jedes Mal neu zu forken, was die Effizienz erheblich verbessert.
php-fpm ist php-Fastcgi Process Manager.
php-fpm ist die Implementierung von FastCGI und bietet Prozessverwaltungsfunktionen.
Der Prozess umfasst den Master-Prozess und den Worker-Prozess.
Es gibt nur einen Master-Prozess, der für das Abhören des Ports und den Empfang von Anforderungen vom Webserver verantwortlich ist. Es gibt im Allgemeinen mehrere Worker-Prozesse (die spezifische Anzahl wird entsprechend den tatsächlichen Anforderungen konfiguriert). Darin eingebettet ist PHP, wo der Code tatsächlich ausgeführt wird.
Wir wissen, dass Nginx nicht nur die Funktion hat, http-Anfragen zu verarbeiten, sondern auch Reverse-Proxy ausführen kann.
Also leitet Nginx dynamische Anfragen über die Reverse-Proxy-Funktion an das Backend PHP-FPM weiter.
Lassen Sie uns ein neues Nginx+Php-fpm konfigurieren
Geben Sie das Verzeichnis nginx ein und bearbeiten Sie die Datei nginx.conf.
Wie in der Abbildung gezeigt, fügen Sie in der letzten Zeile von nginx.conf die Include-Datei
hinzu Geben Sie oben den Include-Pfad ein und fügen Sie einen Server hinzu.
Lassen Sie uns die Bedeutung der Konfigurationselemente erklären:
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地址和端口 } }
Kurz gesagt: Wenn wir www.example.com besuchen, ist der Verarbeitungsablauf wie folgt:
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 | | 等待处理。。。
Jetzt aktivieren wir PHP-FPM von PHP um diese Anfrage zu bearbeiten
Öffnen Sie die Datei php-fpm.conf und wir sehen die folgende Konfiguration:
Das heißt: Das PHP-FPM-Modul lauscht den Port 127.0.0.1:9000 und wartet auf die Bearbeitung der Anfrage.
Die Kombination von Nginx und PHP-FPM, der gesamte Prozess ist so.
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返回给浏览器
Erfolgreich gestartet, wir überprüfen den PHP-FPM-Prozess
Wie oben gezeigt, gibt es einen Master-Prozess und 3 Worker-Prozesse .
Wir bearbeiten die Datei wie unten gezeigt:
【Verwandte Tutorials: PHP-Video-Tutorial】
Das obige ist der detaillierte Inhalt vonDer Funktionsmechanismus und die Prinzipien zwischen PHP und Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!