Heim >Backend-Entwicklung >PHP-Tutorial >Eine detaillierte Einführung in den Funktionsmechanismus und die Prinzipien zwischen PHP und Nginx

Eine detaillierte Einführung in den Funktionsmechanismus und die Prinzipien zwischen PHP und Nginx

不言
不言nach vorne
2019-03-25 09:44:253276Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Einführung in den Funktionsmechanismus und die Prinzipien zwischen PHP und Nginx. Ich hoffe, dass er für Freunde hilfreich ist.

1. Wissenspunkte im Zusammenhang mit Nginx und PHP-fpm bekannt machen

Was ist Nginx

Nginx („Engine x“) ist ein leistungsstarkes HTTP und Antwortserver Ein Proxyserver, der auch ein IMAP/POP3/SMTP-Server ist.

Was ist PHP-fpm

1. CGI, Fast-CGI-Protokoll

Die Geschichte von CGI

Frühe Webserver verarbeiteten nur statische Dateien wie HTML Aber mit der Entwicklung der Technologie sind dynamische Sprachen wie PHP entstanden.
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.

Verbesserungen von Fast-CGI

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.

2. Was ist php-fpm

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.

2. So kombinieren Sie Nginx mit PHP-fpm

Wir wissen, dass Nginx nicht nur die Funktion hat, http-Anfragen zu verarbeiten, sondern auch als Reverse-Proxy verwendet werden 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

1. Konfigurieren Sie die Datei nginx.conf

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. 2. Fügen Sie den entsprechenden Server

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 besuchen .com, der Verarbeitungsablauf ist wie folgt:

 www.example.|
        ||
        |.example.com/index.|
        |-|
        |-cgi监听127.0.0.1:|
        |.example.com/index.php请求到达127.0.0.1:9000
        |
        |
   等待处理。。。

Als nächstes aktivieren wir PHP-FPM von PHP, um diese Anfrage zu verarbeiten

Öffnen Sie die PHP -fpm.conf-Datei, sehen wir uns die folgende Konfiguration an:

Das heißt: Das PHP-FPM-Modul hört auf den Port 127.0.0.1:9000 und wartet auf die Anfrage, die bearbeitet werden soll.

3. Zusammenfassung

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返回给浏览器

4. Effektanzeige

1. Starten Sie die Nginx- und PHP-FPM-Module

Erfolgreich starten, überprüfen wir das PHP-FPM Prozess

Wie oben gezeigt, gibt es einen Master-Prozess und drei Worker-Prozesse.

2. Erstellen Sie eine Datei im Website-Verzeichnis

Wir bearbeiten die Datei wie unten gezeigt:

3 🎜>

Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte

PHP-Video-Tutorial auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in den Funktionsmechanismus und die Prinzipien zwischen PHP und Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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