Heim  >  Artikel  >  Backend-Entwicklung  >  php.ini-, php-fpm- und www.conf-Konfiguration in PHP7

php.ini-, php-fpm- und www.conf-Konfiguration in PHP7

藏色散人
藏色散人nach vorne
2019-08-23 14:07:195051Durchsuche

PHP7Konfiguration von php.ini, php-fpm und www.conf

php.ini wird von PHP ausgeführt Kernkonfigurationsdatei, im Folgenden sind einige gängige Konfigurationen aufgeführt

extension_dir=""

● Legen Sie den Pfad der PHP-Erweiterungsbibliothek fest

expose_php = Off

● Vermeiden Sie die Offenlegung von PHP-Informationen in HTTP-Headern

display_errors = Off

● Vermeiden Sie die Offenlegung von Fehlermeldungen, wenn PHP MySQL aufruft

log_errors = On

● Beim Schließen Aktivieren Sie das PHP-Fehlerprotokoll nach display_errors (der Pfad ist in php-fpm.conf konfiguriert)

zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so

● Richten Sie PHPs Opcache und die dynamische MySQL-Bibliothek ein

date.timezone = PRC

● Stellen Sie die PHP-Zeitzone ein

opcache.enable=1

● Aktivieren Sie Opcache

open_basedir = /usr/share/nginx/html;

● Stellen Sie das PHP-Skript so ein, dass der Zugriff auf das Verzeichnis möglich ist (muss entsprechend der tatsächlichen Situation konfiguriert werden).

php-fpm.conf ist die Konfigurationsdatei des PHP-FPM-Prozessdienstes. Im Folgenden sind einige Gemeinsamkeiten aufgeführt Konfigurationen

error_log = /usr/local/php/logs/php-fpm.log

● Legen Sie den Pfad des Fehlerprotokolls fest

include=/usr/local/php7/etc/php-fpm.d/*.conf

● Geben Sie die Konfiguration im www ein. conf-Datei (standardmäßig festgelegt)

Die Hauptkonfigurationsinformationen von php-fpm.conf und www.conf

pid = run/php-fpm.pid

● pid Die Standardeinstellung ist var/run/php-fpm.pid im Installationsverzeichnis. Es wird empfohlen, das Fehlerprotokoll

error_log = log/php-fpm.log

● zu aktivieren, das var/log/ ist. php-fpm.log standardmäßig im Installationsverzeichnis

log_level = notice

● Fehlerstufe: Warnung (muss sofort verarbeitet werden), Fehler (Fehlersituation), Warnung ( Warnsituation), Hinweis (allgemeine wichtige Informationen), Debug (Debugging-Informationen).

emergency_restart_threshold = 60

emergency_restart_interval = 60s

● Zeigt an, dass, wenn die Die Anzahl der PHP-CGI-Prozesse mit SIGSEGV- oder SIGBUS-Fehlern innerhalb des durch Emergency_restart_interval festgelegten Werts überschreitet Emergency_restart_threshold. PHP-FPM führt einen ordnungsgemäßen Neustart durch. Diese beiden Optionen bleiben im Allgemeinen auf ihren Standardwerten.

process_control_timeout = 0

● Legen Sie das Zeitlimit für den untergeordneten Prozess fest, um das Wiederverwendungssignal des Hauptprozesses zu akzeptieren. Verfügbare Einheiten: s (Sekunden), m (Minuten), h (Stunden). , oder d (Tage) Standardeinheit: s (Sekunden).

daemonize = yes

● Der Standardwert ist „Ja“, was möglich ist Zum Debuggen in „Nein“ geändert. In FPM ist es möglich, mehrere Prozesspools mit unterschiedlichen Einstellungen auszuführen. Diese Einstellungen können für jeden Prozesspool individuell festgelegt werden.

listen = 127.0.0.1:9000

● Der Listening-Port ist die von PHP in Nginx verarbeitete Adresse. Im Allgemeinen ist der Standardwert ausreichend. Verfügbare Formate sind: „ip:port“, „port“, „/path/to/unix/socket“. Jeder Prozesspool muss festgelegt werden.

listen.backlog = -1

● Rückstand Zahl, -1 bedeutet unbegrenzt, wird vom Betriebssystem bestimmt, kommentieren Sie diese Zeile einfach aus.

listen.allowed_clients = 127.0.0.1

● Erlauben Sie den Zugriff auf die IP des FastCGI-Prozesses. Stellen Sie „any“ auf „uneingeschränkte IP“ ein. Wenn Sie nginx anderer Hosts so einstellen möchten, dass sie ebenfalls auf diesen FPM-Prozess zugreifen Kosten beim Abhören der IP-Adresse, auf die zugegriffen werden kann. Der Standardwert ist beliebig. Jede Adresse wird durch Kommas getrennt. Wenn sie nicht festgelegt oder leer ist, darf jeder Server eine Verbindung anfordern

listen.owner = www listen.group = www listen.mode = 0666

● Unix-Socket-Einstellungsoptionen, bei Zugriff über TCP, hier kommentieren. Das ist Es.

user = www group = www

● Konto und Gruppe zum Starten des Prozesses

PHP-FPM-Prozesspool-Optimierungsmethode

pm = dynamic

● Für dedizierte Server kann PM auf statisch eingestellt werden.

So steuern Sie den untergeordneten Prozess. Die Optionen sind statisch und dynamisch. Wenn „Statisch“ ausgewählt ist, wird durch pm.max_children eine feste Anzahl an untergeordneten Prozessen angegeben. Wenn dynamisch ausgewählt ist, wird dies durch die folgenden Parameter bestimmt:

pm.max_children

● Die Anzahl der im statischen Modus geöffneten PHP-FPM-Prozesse und begrenzt den maximalen Prozess von PHP- fpm im dynamischen Modus Nummer (beachten Sie hier, dass der Wert von pm.max_spare_servers nur kleiner oder gleich pm.max_children sein kann)

pm.start_servers

● Die Anzahl der anfänglichen PHP-FPM Prozesse im dynamischen Modus.

pm.min_spare_servers

● Stellen Sie sicher, dass die Mindestanzahl an Leerlaufprozessen unter diesem Wert liegt, erstellen Sie einen neuen untergeordneten Prozess

pm.max_spare_servers

● Garantieren Sie die maximale Anzahl von Leerlaufprozessen. Wenn die Anzahl der Leerlaufprozesse größer als dieser Wert ist, wird sie bereinigt

● Wenn dm auf static gesetzt ist, wird nur der Parameter pm.max_children wirksam. Das System öffnet die durch die Parameter festgelegte Anzahl von PHP-FPM-Prozessen. Ein PHP-FPM-Prozess wird wahrscheinlich 20 bis 40 MB Speicher belegen, daher sollte seine numerische Größeneinstellung entsprechend der Größe Ihres physischen Speichers festgelegt werden. Sie sollten auch auf andere Speicherbelegungen wie Datenbanken, Systemprozesse usw. achten. , um die Einstellwerte der oben genannten 4 Parameter zu bestimmen!

● Wenn dm auf dynamisch eingestellt ist, werden alle 4 Parameter wirksam. Das System startet die php-fpm-Prozesse von pm.start_servers, wenn php-fpm ausgeführt wird, und passt dann die Anzahl der php-fpm-Prozesse zwischen pm.min_spare_servers und pm.max_spare_servers entsprechend den Anforderungen des Systems dynamisch an. Der Parameter erfordert, dass der Wert von pm.start_servers zwischen pm.min_spare_servers und pm.max_spare_servers liegt.

pm.max_requests = 1000

● Legen Sie die Anzahl der bearbeiteten Anfragen fest, bevor jeder untergeordnete Prozess wiedergeboren wird.

● Die maximale Anzahl der verarbeiteten Anfragen bezieht sich darauf, wie viele Anfragen ein PHP-. Der fpm-Worker-Prozess wird verarbeitet. Nachdem eine Anfrage beendet wurde, wird der Master-Prozess eine neue erneut starten.

● Der Hauptzweck dieser Konfiguration besteht darin, Speicherverluste zu vermeiden, die durch den PHP-Interpreter oder durch das Programm referenzierte Bibliotheken von Drittanbietern verursacht werden.

ist sehr nützlich für Module von Drittanbietern, die möglicherweise Speicherlecks aufweisen. Wenn sie auf „0“ gesetzt sind, werden Anforderungen immer akzeptiert. Standardwert: 0.

pm.status_path = /status

● Die URL der FPM-Statusseite. Wenn nicht festgelegt, kann auf die Statusseite nicht zugegriffen werden: Keine >

● Die Ping-URL der FPM-Überwachungsseite. Wenn sie nicht festgelegt ist, kann auf die Ping-Seite nicht zugegriffen werden. Diese Seite wird verwendet, um extern zu erkennen, ob das FPM aktiv ist und auf Anfragen antworten kann Beginnen Sie mit einem Schrägstrich (/).

ping.path = /ping

● Wird verwendet, um die Antwort auf die Ping-Anfrage zu definieren. Der zurückgegebene Text/einfache Formattext ist HTTP 200. Standardwert: pong.

ping.response = pong

● Legen Sie das Zeitlimit für eine einzelne Anfrage fest. Diese Option kann nützlich sein, wenn die Einstellung „max_execution_time“ in der php.ini das laufende Skript aus bestimmten Gründen nicht abbricht. für „Aus“. Sie können versuchen, diese Option zu ändern, wenn 502-Fehler häufig auftreten.

request_terminate_timeout = 0

● Wenn für eine Anfrage der Timeout-Zeitraum festgelegt ist, werden die entsprechenden PHP-Call-Stack-Informationen vollständig in das langsame Protokoll geschrieben. Die Einstellung „0“ bedeutet „Aus“. '

request_slowlog_timeout = 10s

● Langsame Anforderungsprotokollierung, Verwendung mit request_slowlog_timeout

slowlog = log/$pool.log.slow

● Legen Sie das rlimit des Dateiöffnungsdeskriptorlimits fest. Standardwert: Der systemdefinierte Wert des standardmäßigen öffenbaren Handles ist 1024, der mit ulimit -n angezeigt und mit ulimit -n 2048 geändert werden kann.

rlimit_files = 1024

● Legen Sie den maximalen Grenzwert von core rlimit fest. Verfügbare Werte: „unbegrenzt“, 0 oder positive Ganzzahl.

rlimit_core = 0

● Chroot-Verzeichnis beim Start. Wenn nicht festgelegt, wird chroot nicht verwendet >● Festlegen des Startverzeichnisses, in das beim Start automatisch verwiesen wird. Das definierte Verzeichnis muss ein absoluter Pfad sein: aktuelles Verzeichnis oder /directory (beim Chrooten)

chroot =

● Leiten Sie stdout und stderr während des laufenden Prozesses zur Hauptfehlerprotokolldatei um. Wenn nicht festgelegt, werden stdout und stderr gemäß den FastCGI-Regeln umgeleitet.`

chdir =

         

● Bereinigen Sie die Umgebung

catch_workers_output = yes

variables_order

Der Variable_order-Parameter wird in einem anderen Artikel clear_env = no  https://www .php .cn/php-weizijiaocheng-429277.html

Häufige Fehler und Lösungen

Das Anforderungszeitlimit ist nicht festgelegt

● Wenn der Wert von request_terminate_timeout auf 0 oder zu lang eingestellt ist, kann dies dazu führen, dass das PHP-Skript weiterhin ausgeführt wird. Wenn alle PHP-CGI-Prozesse in der Funktion file_get_contents() hängen bleiben, kann dieser Nginx+PHP-WebServer auf diese Weise keine neuen PHP-Anfragen mehr verarbeiten und Nginx gibt „502 Bad Gateway“ an den Benutzer zurück. Das Festlegen einer

maximalen Ausführungszeit für PHP-Skripte ist notwendig, behandelt aber eher die Symptome als die Grundursache. Wenn es beispielsweise auf 30 Sekunden geändert wird und file_get_contents () langsam ist, um Webseiteninhalte abzurufen, bedeutet dies, dass 150 PHP-CGI-Prozesse nur 5 Anforderungen pro Sekunde verarbeiten können und es für WebServer auch schwierig ist, „502 Bad“ zu vermeiden Tor". Die Lösung besteht darin, request_terminate_timeout auf 10 Sekunden oder einen angemessenen Wert zu setzen oder einen Timeout-Parameter zu file_get_contents hinzuzufügen!

Unsachgemäße Konfiguration des max_requests-Parameters

● Eine unsachgemäße Konfiguration des max_requests-Parameters kann zu zeitweiligen 502-Fehlern führen:

● Legen Sie die Anzahl der bearbeiteten Anfragen fest, bevor jeder untergeordnete Prozess neu gestartet wird. Dies ist sehr nützlich für Module von Drittanbietern, die möglicherweise Speicherlecks aufweisen. Wenn sie auf „0“ gesetzt sind, werden Anfragen immer akzeptiert Variable. Standardwert: 0.

Diese Konfiguration bedeutet, dass der Prozess automatisch neu gestartet wird, wenn die Anzahl der von einem PHP-CGI-Prozess verarbeiteten Anfragen 500 erreicht.

● Aber warum müssen wir den Prozess neu starten?

● Im Allgemeinen verwenden wir in gewissem Umfang einige PHP-Bibliotheken von Drittanbietern. Wenn der PHP-CGI-Prozess nicht regelmäßig neu gestartet wird, kommt es häufig zu Speicherverlusten verursachen einen weiteren Anstieg der Speicherauslastung. Daher stellt PHP-FPM als Manager von PHP-CGI eine solche Überwachungsfunktion bereit, um den PHP-CGI-Prozess neu zu starten, der eine bestimmte Anzahl von Malen angefordert hat, um sicherzustellen, dass die Speichernutzung nicht ansteigt.

php-fpms langsames Protokoll-, Debug- und Ausnahme-Fehlerbehebungstool

● request_slowlog_timeout legt einen Timeout-Parameter fest, slowlog legt den Speicherort des langsamen Protokolls fest, tail -f / Sie können den PHP-Prozess, der zu langsam ausgeführt wird, in var/log/www.slow.log sehen.

Sie können die häufigen Probleme übermäßiger Netzwerklesung und langsamer MySQL-Abfragen erkennen. Wenn Sie den Anweisungen zur Behebung des Problems folgen, erhalten Sie eine klare Richtung.

Das obige ist der detaillierte Inhalt vonphp.ini-, php-fpm- und www.conf-Konfiguration in PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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