Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Konfiguration von php.ini, php-fpm und www.conf in PHP7

Detaillierte Erläuterung der Konfiguration von php.ini, php-fpm und www.conf in PHP7

coldplay.xixi
coldplay.xixinach vorne
2020-06-18 17:00:294126Durchsuche

Detaillierte Erläuterung der Konfiguration von php.ini, php-fpm und www.conf in PHP7

php.ini ist die Kernkonfigurationsdatei für die Ausführung von PHP. Im Folgenden sind einige häufig verwendete Konfigurationen aufgeführt.

extension_dir=""

  • Einrichtung Pfad der PHP-Erweiterungsbibliothek

expose_php = Off

  • Vermeiden Sie, dass PHP-Informationen in HTTP-Headern offengelegt werden

display_errors = Off

  • Vermeiden Sie die Offenlegung der Fehlerinformationen von PHP, die MySQL aufrufen

log_errors = On

  • Aktivieren Sie das PHP-Fehlerprotokoll nach dem Deaktivieren von display_errors (der Pfad wird in PHP konfiguriert -fpm.conf)

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

  • Opcache und dynamische MySQL-Bibliotheken von PHP einrichten

date.timezone = PRC

  • PHP-Zeitzone einrichten

opcache.enable=1

  • Opcache aktivieren

open_basedir = /usr/share/nginx/html;

  • Legen Sie PHP-Skriptverzeichnisse fest, auf die zugegriffen werden darf (müssen entsprechend der tatsächlichen Situation konfiguriert werden)

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

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

  • Führen Sie die Konfiguration in die www.conf-Datei ein (standardmäßig eingestellt)

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

pid = run/php-fpm.pid

  • PID-Einstellungen, der Standardwert ist var/run/ im Installationsverzeichnis php-fpm.pid, es wird empfohlen,

error_log = log/php-fpm.log

    Fehlerprotokoll, das sich standardmäßig im Installationsverzeichnis befindet

log_level = notice

Fehlerstufe verfügbar Ebenen sind: Warnung (muss sofort behandelt werden), Fehler (Fehlersituation), Warnung (Warnsituation), Hinweis (allgemeine wichtige Informationen), Debug (Fehlerbehebungsinformationen).

emergency_restart_threshold = 60

emergency_restart_interval = 60s

bedeutet, dass SIGSEGV innerhalb des durch Emergency_restart_interval festgelegten Werts auftritt. Oder wenn die Anzahl der PHP-CGI-Prozesse mit SIGBUS-Fehlern Emergency_restart_threshold überschreitet, wird PHP-FPM ordnungsgemäß neu gestartet . Diese beiden Optionen bleiben im Allgemeinen auf ihren Standardwerten.

process_control_timeout = 0

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

daemonize = yes

fpm im Hintergrund ausführen, Der Standardwert ist „Ja“. Wenn Sie debuggen möchten, können Sie ihn in „Nein“ ändern. 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

Die Anzahl der Rückstände, -1 bedeutet keine Begrenzung, 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, um die IP anderer Hosts nicht einzuschränken Um auf diesen FPM-Prozess zuzugreifen, sollte der Abhörort auf eine lokale IP eingestellt werden, auf die zugegriffen werden kann. Der Standardwert ist „any“. Jede Adresse ist durch Kommas getrennt. Wenn sie nicht festgelegt oder leer ist, kann jeder Server eine Verbindung anfordern.

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

Unix-Socket-Einstellungsoption, wenn TCP verwendet wird , kommentieren Sie einfach hier.

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. Zur Steuerung des untergeordneten Prozesses stehen statische und dynamische Optionen zur Verfügung. 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 PHP im dynamischen Modus – Die maximale Anzahl von Prozessen für fpm (beachten Sie hier, dass der Wert von pm.max_spare_servers nur kleiner oder gleich pm.max_children sein kann)

pm.start_servers

Im dynamischen Modus starten Anzahl der PHP-FPM-Prozesse.

pm.min_spare_servers

Garantie die Mindestanzahl an Leerlaufprozessen. Wenn die Anzahl der Leerlaufprozesse unter diesem Wert liegt, erstellen Sie einen neuen untergeordneten Prozess

  • Garantie die maximale Anzahl von Leerlaufprozessen. Wenn die Leerlaufprozesse größer als dieser Wert sind, werden sie bereinigt.
  • Wenn dm auf „statisch“ gesetzt ist, wird nur der Parameter „pm.max_children“ bereinigt wirksam werden. 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 auf ein PHP -fpm worker Der Prozess wird nach der Verarbeitung einiger Anfragen beendet und der Masterprozess startet einen neuen. 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 kann nicht aufgerufen werden. Standardwert: keine

ping.path = /ping

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 antworten kann Bitte beachten Sie, dass es mit einem Schrägstrich (/) beginnen muss.

ping.response = pong

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

request_terminate_timeout = 0

Legen Sie die Timeout-Abbruchzeit für eine einzelne Anfrage fest. Diese Option kann für Skripte nützlich sein, bei denen die „max_execution_time“ in der php.ini-Einstellung dies nicht tut Aus bestimmten Gründen die Ausführung von Skripten abbrechen. Setzen Sie diese Option auf „0“, wenn 502-Fehler häufig auftreten.

request_slowlog_timeout = 10s

Wenn eine Anfrage für diese Einstellung abläuft, werden die entsprechenden PHP-Call-Stack-Informationen vollständig in das langsame Protokoll geschrieben. Auf „0“ gesetzt. bedeutet „Aus“

slowlog = log/$pool.log.slow

Langsame Anforderungsprotokollierung, verwendet mit request_slowlog_timeout

rlimit_files = 1024

Legen Sie den rlimit-Grenzwert des Dateiöffnungsdeskriptors fest: Der systemdefinierte Wert des Standardöffnungshandles ist 1024, der mit ulimit -n angezeigt und mit ulimit -n 2048 geändert werden kann.

rlimit_core = 0

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

chroot =

Das definierte Verzeichnis muss ein absoluter Pfad sein. Wenn nicht festgelegt, wird Chroot nicht verwendet.

chdir =

Legen Sie das Startverzeichnis fest, in das beim Start automatisch verwiesen wird. Das definierte Verzeichnis muss ein absoluter Pfad sein: aktuelles Verzeichnis oder /directory (beim Chrooten)

catch_workers_output = yes

Stdout und stderr während des laufenden Prozesses in die Hauptfehlerprotokolldatei umleiten. Wenn nicht festgelegt, werden stdout und stderr zugrunde gelegt zu FastCGI-Regeln. Umgeleitet nach /dev/null. Standardwert: leer Variable_Order
  • Der Parameter Variable_Order wird in einer anderen Artikel-URL ausführlich erläutert: juejin.im/post/5c4eea…
Häufige Fehler und Lösungen werden zusammengestellt

clear_env = noDas Anforderungszeitlimit gilt nicht set

  • Wenn der Wert von request_terminate_timeout auf 0 oder zu lang gesetzt 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. setze ein Allerdings ist eine maximale Ausführungszeit von PHP-Skripten erforderlich, um die Symptome und nicht die Grundursache zu behandeln. 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 zeitweilige 502-Fehler verursachen:

  • 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. Entspricht der Umgebungsvariablen PHP_FCGI_MAX_REQUESTS. 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 den Prozess neu starten?

  • Im Allgemeinen verwenden wir in gewissem Umfang einige PHP-Bibliotheken von Drittanbietern. Bei diesen Drittanbieterbibliotheken treten häufig Speicherverluste auf, wenn der PHP-CGI-Prozess nicht neu gestartet wird Regelmäßig führt dies zwangsläufig dazu, dass die Speichernutzung weiter ansteigt. 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-Fehlerbehebungsartefakt

    • request_slowlog_timeout legt einen Timeout-Parameter fest, slowlog legt den Speicherort des langsamen Protokolls fest , tail -f /var/log/www.slow.log kann den PHP-Prozess sehen, der zu langsam ausgeführt wird. Sie können die häufigen Probleme übermäßiger Netzwerklesung und langsamer MySQL-Abfragen erkennen. Wenn Sie das Problem anhand der Eingabeaufforderungsinformationen beheben, erhalten Sie eine klare Richtung.

      Empfohlenes Tutorial: „PHP-Tutorial

    Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Konfiguration von php.ini, php-fpm und www.conf 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