Heim  >  Artikel  >  Backend-Entwicklung  >  Installieren und konfigurieren Sie php-fpm, um eine Nginx+PHP-Produktionsumgebung aufzubauen

Installieren und konfigurieren Sie php-fpm, um eine Nginx+PHP-Produktionsumgebung aufzubauen

不言
不言Original
2018-06-02 10:19:2012928Durchsuche

In diesem Artikel wird hauptsächlich die Installation und Konfiguration von PHP-FPM zum Aufbau einer Nginx+PHP-Produktionsumgebung beschrieben. Die Funktion von PHP-FPM besteht darin, die FastCGI-Prozessverwaltung in das PHP-Paket zu integrieren

nginx selbst kann PHP nicht verarbeiten. Es ist nur ein Webserver. Wenn eine Anfrage eingeht, wird sie zur Verarbeitung an den PHP-Interpreter gesendet und das Ergebnis wird an den Client zurückgegeben .

nginx sendet die Anfrage normalerweise zur Verarbeitung an den Fastcgi-Verwaltungsprozess. Der Fascgi-Verwaltungsprozess wählt das Verarbeitungsergebnis des CGI-Unterprozesses aus und gibt es an nginx zurück

Dieser Artikel verwendet PHP-FPM als Beispiel zur Einführung, wie Nginx PHP unterstützt ein PHP-FastCGI-Manager, der nur für PHP verwendet wird. Er kann unter http://php-fpm.org/download heruntergeladen werden.

PHP-FPM ist eigentlich ein Patch des PHP-Quellcodes, der darauf abzielt, FastCGI zu integrieren Prozessverwaltung in das PHP-Paket. Es muss in Ihren PHP-Quellcode gepatcht werden und kann nach dem Kompilieren und Installieren von PHP verwendet werden. Die neue Version von PHP hat php-fpm integriert, das kein Paket eines Drittanbieters mehr ist. Es wird empfohlen, es zu verwenden. PHP-FPM bietet eine bessere PHP-Prozessverwaltungsmethode, kann Speicher und Prozesse effektiv steuern und die PHP-Konfiguration reibungslos neu laden. Es bietet mehr Vorteile als spawn-fcgi und ist daher offiziell in PHP enthalten. Sie können PHP-FPM mit dem Parameter –enable-fpm in ./configure aktivieren. Die spezifische Bedeutung der Optionen finden Sie hier.

Vorbereitung vor der Installation

Ausführung unter Centos

yum -y install gcc automake autoconf libtool make

yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel

libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel 
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel 
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel 
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

Neue Version von PHP-FPM-Installation (empfohlene Installationsmethode)

wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt

--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath 
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets 
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex 
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli 
--with-gd --with-jpeg-dir

make all install

Beide der oben genannten Methoden können zur Installation von php-fpm verwendet werden. Nach der Installation wird der Inhalt im Verzeichnis /usr/local/php abgelegt

Damit ist die PHP-Installation von FPM abgeschlossen.

Im Folgenden wird der php-fpm-laufende Benutzer

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf
201615100155789.png (300×41)

Ändern

user = www-data
group = www-data
festgelegt

Wenn der www-data-Benutzer nicht existiert, dann fügen Sie zuerst den www-data-Benutzer hinzu


groupadd www-data
useradd -g www-data www-data

2. Kompilieren und installieren Sie Nginx

3. Ändern Sie die Nginx-Konfigurationsdatei, um PHP-FPM zu unterstützen

Nachdem die Nginx-Installation abgeschlossen ist, ändern Sie die Nginx-Konfigurationsdatei zu,nginx.confFügen Sie die folgende Konfiguration zum Serverabschnitt hinzu, achten Sie auf die rote Inhaltskonfiguration, andernfalls wird der Fehler „Keine Eingabedatei angegeben“ angezeigt

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

vier, Test-PHP-Datei erstellen

PHP-Datei erstellen

index.php-Datei unter /usr/local/nginx/ erstellen html, geben Sie den folgenden Inhalt ein:

<?php
  echo phpinfo();
?>

5. Starten Sie den Dienst

Starten Sie php-fpm und nginx

/usr/local/php/sbin/php-fpm 
#手动打补丁的启动方式/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

php-fpm schließen und neu starten, siehe Ende des Artikels

6. Browserzugriff

Besuchen Sie http://Ihre Server-IP/index.php, dort können Sie alles zu den PHP-Informationen sehen.


7. Fehlerbehebung

201615100326710.png (300×120)Bei der Verwendung von Nginx tritt häufig 502 Bad Gateway auf und 504 Gateway-Timeout-Fehler. Lassen Sie uns Nginx+PHP-FPM verwenden, um die Ursachen und Lösungen dieser beiden häufigen Fehler zu analysieren.


1.502 Bad Gateway-Fehler

Es gibt zwei Konfigurationselemente in php.ini bzw. php-fpm.conf: max_execution_time und request_terminate_timeout.
Mit diesen beiden Elementen wird die maximale Ausführungszeit eines PHP-Skripts konfiguriert. Wenn diese Zeit überschritten wird, beendet PHP-FPM nicht nur die Ausführung des Skripts,
beendet auch den Worker-Prozess, der das Skript ausführt. Daher stellt Nginx fest, dass die Verbindung zur Kommunikation mit sich selbst unterbrochen ist, und gibt einen 502-Fehler an den Client zurück.

Am Beispiel von request_terminate_timeout=30 Sekunden von PHP-FPM lauten die spezifischen Informationen des 502 Bad Gateway-Fehlers wie folgt: 1) Nginx-Fehlerzugriffsprotokoll:


   2013/09/19 01:09:00 [error] 27600#0: *78887 recv() failed (104: Connection reset by peer) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

2) PHP-FPM-Fehlerprotokoll:

   WARNING: child 25708 exited on signal 15 (SIGTERM) after 21008.883410 seconds from start

Also einfach die Werte ändern dieser beiden Elemente Durch Erhöhen der Größe wird das PHP-Skript aufgrund der langen Ausführungszeit nicht beendet. request_terminate_timeout kann max_execution_time überschreiben,

wenn Sie also die globale php.ini nicht ändern möchten, ändern Sie einfach die Konfiguration von PHP-FPM.

Beachten Sie außerdem die Elemente max_fail und fail_timeout im Upstream-Modul von Nginx. Manchmal wird die Kommunikation zwischen Nginx und dem Upstream-Server (z. B. Tomcat, FastCGI) nur versehentlich unterbrochen.

Wenn max_fail jedoch auf einen relativ kleinen Wert eingestellt ist, geht Nginx beim nächsten fail_timeout davon aus, dass der Upstream-Server dies tut unten, und es wird der Fehler 502 zurückgegeben.

So können Sie max_fail erhöhen und fail_timeout verringern.

2.504 Gateway-Timeout-Fehler

PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置factcgi_connect/read/send_timeout。

以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

   2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: Connection timed out) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。

配置举例:

location ~ \.php$ {
        root          /home/cdai/test.com;
        include         fastcgi_params;
        fastcgi_connect_timeout   180;
        fastcgi_read_timeout      600;
        fastcgi_send_timeout      600;
        fastcgi_pass      unix:/dev/shm/php-fcgi.sock;
        fastcgi_index      index.php;
        fastcgi_param     SCRIPT_FILENAME /home/cdai/test.com$fastcgi_script_name;
   }

Das obige ist der detaillierte Inhalt vonInstallieren und konfigurieren Sie php-fpm, um eine Nginx+PHP-Produktionsumgebung aufzubauen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn