PHP7Configuration de php.ini, php-fpm et www.conf
php.ini est exécuté en php Fichier de configuration de base, voici quelques configurations courantes
extension_dir=""
● Définir le chemin de la bibliothèque d'extension PHP
expose_php = Off
● Évitez d'exposer les informations PHP dans les en-têtes http
display_errors = Off
● Évitez d'exposer les messages d'erreur lorsque PHP appelle mysql
log_errors = On
● Lors de la fermeture Activez le journal des erreurs PHP après display_errors (le chemin est configuré dans php-fpm.conf)
zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so
● Configurez l'opcache et la bibliothèque dynamique mysql de PHP
date.timezone = PRC
● Définir le fuseau horaire PHP
opcache.enable=1
● Activer opcache
open_basedir = /usr/share/nginx/html;
● Définissez le script PHP pour autoriser l'accès au répertoire (doit être configuré en fonction de la situation réelle)
php-fpm.conf est le fichier de configuration du service de processus php-fpm. Voici quelques exemples courants. configurations
error_log = /usr/local/php/logs/php-fpm.log
● Définir le chemin du journal des erreurs
include=/usr/local/php7/etc/php-fpm.d/*.conf
● Présenter la configuration dans le www. fichier conf (défini par défaut)
Les principales informations de configuration de php-fpm.conf et www.conf
pid = run/php-fpm.pid
greep pid paramètre, la valeur par défaut est var/run/php-fpm.pid dans le répertoire d'installation, il est recommandé d'activer le
error_log = log/php-fpm.log
● journal des erreurs, qui est var/log/ php-fpm.log dans le répertoire d'installation par défaut
log_level = notice
● Niveau d'erreur disponible : alerte (doit être traité immédiatement), erreur (situation d'erreur), avertissement (. situation d'avertissement), avis (informations générales importantes), débogage (informations de débogage). Le nombre de processus php-cgi qui ont des erreurs SIGSEGV ou SIGBUS dans la valeur définie par Emergency_restart_interval dépasse Emergency_restart_threshold, php-fpm redémarrera gracieusement. Ces deux options restent généralement à leurs valeurs par défaut.
emergency_restart_threshold = 60
● Définissez le délai d'attente du processus enfant pour accepter le signal de réutilisation du processus principal. Unités disponibles : s (secondes), m (minutes), h (heures). , ou d (Jours) Unité par défaut : s (secondes). Valeur par défaut : 0.emergency_restart_interval = 60s
● Exécuter fpm en arrière-plan. changé en non pour le débogage. Dans FPM, il est possible d'exécuter plusieurs pools de processus avec des paramètres différents. Ces paramètres peuvent être définis individuellement pour chaque pool de processus. process_control_timeout = 0
● Le port d'écoute est l'adresse traitée par php dans nginx Généralement, la valeur par défaut est suffisante. Les formats disponibles sont : 'ip:port', 'port', '/path/to/unix/socket'. Chaque pool de processus doit être défini.daemonize = yes
gree backlog. Nombre, -1 signifie illimité, déterminé par le système d'exploitation, commentez simplement cette ligne. listen = 127.0.0.1:9000
● Autoriser l'accès à l'adresse IP du processus FastCGI. Définissez any sur une adresse IP sans restriction. Si vous souhaitez configurer nginx d'autres hôtes pour accéder également à ce processus FPM, définissez le. coût à l’écoute. Adresse IP accessible. La valeur par défaut est quelconque. Chaque adresse est séparée par des virgules. S'il n'est pas défini ou est vide, n'importe quel serveur est autorisé à demander une connexion listen.backlog = -1
● Options de configuration du socket Unix, en cas d'accès via TCP, commentez ici. il. listen.allowed_clients = 127.0.0.1
● Compte et groupe pour démarrer le processuslisten.owner = www listen.group = www listen.mode = 0666
Méthode d'optimisation du pool de processus php-fpm
user = www group = www
Comment contrôler le processus enfant, les options sont statiques et dynamiques. Si static est sélectionné, un nombre fixe de processus enfants est spécifié par pm.max_children. Si dynamique est sélectionné, il est déterminé par les paramètres suivants :
pm = dynamic
● Le nombre de php-fpm initial processus en mode dynamique. pm.max_children
● Assurez-vous du nombre minimum de processus inactifs. Si le processus inactif est inférieur à cette valeur, créez un nouveau processus enfant pm.start_servers
.
● Si dm est défini sur static, seul le paramètre pm.max_children prendra effet. Le système ouvrira le nombre de processus php-fpm défini par les paramètres. Un processus php-fpm occupera probablement 20 à 40 mo de mémoire, son paramètre de taille numérique doit donc être défini en fonction de la taille de votre mémoire physique. Vous devez également faire attention aux autres occupations de mémoire, telles que les bases de données, les processus système, etc. , pour déterminer Les valeurs de réglage des 4 paramètres ci-dessus !
● Si dm est réglé sur dynamique, les 4 paramètres prendront effet. Le système démarrera les processus php-fpm pm.start_servers lorsque php-fpm commencera à s'exécuter, puis ajustera dynamiquement le nombre de processus php-fpm entre pm.min_spare_servers et pm.max_spare_servers en fonction des besoins du système. Le paramètre nécessite que la valeur de pm.start_servers soit comprise entre pm.min_spare_servers et pm.max_spare_servers.
pm.max_requests = 1000
● Définissez le nombre de requêtes traitées avant la renaissance de chaque processus enfant
● Le nombre maximum de requêtes traitées fait référence au nombre de requêtes qu'un php-. Le processus de travail fpm est en cours de traitement. Une fois la requête terminée, le processus maître en réengendrera une nouvelle.
● Le but principal de cette configuration est d'éviter les fuites de mémoire provoquées par l'interpréteur php ou les bibliothèques tierces référencées par le programme.
est très utile pour les modules tiers qui peuvent avoir des fuites de mémoire. Si elle est définie sur '0', les requêtes seront toujours acceptées. Équivalent à la variable d'environnement PHP_FCGI_MAX_REQUESTS Valeur par défaut : 0.
pm.status_path = /status
ping.path = /ping
● L'URL du ping de la page de surveillance du FPM Si elle n'est pas définie, la page ping n'est pas accessible. Cette page est utilisée pour détecter en externe si le FPM est vivant et peut répondre aux requêtes. commencez par une barre oblique (/).
ping.response = pong
● Utilisé pour définir la réponse de retour de la requête ping. Le texte renvoyé/texte au format brut est HTTP 200. Valeur par défaut : pong.
request_terminate_timeout = 0
● Définir le délai d'attente pour une seule requête. Cette option peut être utile si le 'max_execution_time' dans le paramètre php.ini n'abandonne pas le script en cours d'exécution pour des raisons particulières. pour « Désactivé ». Vous pouvez essayer de modifier cette option lorsque des erreurs 502 se produisent fréquemment.
request_slowlog_timeout = 10s
● Lorsqu'une requête est définie pour le délai d'attente, les informations correspondantes de la pile d'appels PHP seront entièrement écrites dans le journal lent. Le définir sur « 0 » signifie « Désactivé ». '
slowlog = log/$pool.log.slow
● Journalisation lente des requêtes, à utiliser avec request_slowlog_timeout
rlimit_files = 1024
● Définissez la limite rlimit de la limite du descripteur d'ouverture de fichier. Valeur par défaut : la valeur définie par le système du handle d'ouverture par défaut est 1024, qui peut être visualisée à l'aide de ulimit -n et modifiée avec ulimit -n 2048.
rlimit_core = 0
● Définissez la valeur limite maximale du noyau rlimit Valeurs disponibles : "illimité", 0 ou entier positif : valeur définie par le système.
● Répertoire chroot au démarrage. Le répertoire défini doit être un chemin absolu. S'il n'est pas défini, le chroot ne sera pas utilisé. > ● Paramétrage du répertoire de démarrage, vers lequel sera automatiquement redirigé lors du démarrage. Le répertoire défini doit être un chemin absolu : répertoire actuel, ou /directory (lors du chrooting) chroot =
● Redirigez stdout et stderr pendant le processus en cours vers le fichier journal des erreurs principal. S'ils ne sont pas définis, stdout et stderr seront redirigés vers /dev/null selon les règles FastCGI : vide.`chdir =
catch_workers_output = yes
Le paramètre variables_order est expliqué dans un autre article clear_env = no
https://www .php .cn/php-weizijiaocheng-429277.html
Erreurs et solutions courantes
Le délai d'expiration de la demande n'est pas défini
● Si la valeur de request_terminate_timeout est définie sur 0 ou trop longue, cela peut entraîner la poursuite de l'exécution du script PHP. De cette façon, lorsque tous les processus php-cgi sont bloqués dans la fonction file_get_contents(), ce serveur Web Nginx+PHP ne peut plus gérer les nouvelles requêtes PHP, et Nginx renverra "502 Bad Gateway" à l'utilisateur. Définir untemps d'exécution maximum pour les scripts PHP est nécessaire, mais cela traite les symptômes plutôt que la cause première. Par exemple, s'il est modifié en 30s, si file_get_contents() met du temps à obtenir le contenu d'une page Web, cela signifie que 150 processus php-cgi ne peuvent gérer que 5 requêtes par seconde, et il est également difficile pour le serveur Web d'éviter "502 Bad". Porte". La solution consiste à définir request_terminate_timeout sur 10 s ou une valeur raisonnable, ou à ajouter un paramètre timeout à file_get_contents !
Une configuration incorrecte du paramètre max_requests
● Une configuration incorrecte du paramètre max_requests peut provoquer des erreurs 502 intermittentes :● Définissez le nombre de requêtes servies avant la renaissance de chaque processus enfant. Ceci est très utile pour les modules tiers qui peuvent avoir des fuites de mémoire. Si la valeur est « 0 », les requêtes seront toujours acceptées. variable. Valeur par défaut : 0.
Cette configuration signifie que lorsque le nombre de requêtes traitées par un processus PHP-CGI s'accumule à 500, le processus sera automatiquement redémarré.
● Mais pourquoi devons-nous relancer le processus ?
● Généralement dans les projets, nous utiliserons dans une certaine mesure certaines bibliothèques tierces de PHP. Ces bibliothèques tierces ont souvent des problèmes de fuite de mémoire. Si le processus PHP-CGI n'est pas redémarré régulièrement, il le sera inévitablement. provoquer une utilisation de la mémoire. Par conséquent, PHP-FPM, en tant que gestionnaire de PHP-CGI, fournit une telle fonction de surveillance pour redémarrer le processus PHP-CGI qui a demandé un nombre de fois spécifié afin de garantir que l'utilisation de la mémoire n'augmente pas.
Artefact de dépannage du journal lent, du débogage et des exceptions de php-fpm
● request_slowlog_timeout définit un paramètre de délai d'attente, slowlog définit l'emplacement de stockage du journal lent, tail -f / Vous pouvez voir le processus php qui s'exécute trop lentement dans var/log/www.slow.log.
Vous pouvez voir les problèmes courants de lecture réseau excessive et de requête Mysql lente. Si vous suivez les informations d'invite pour résoudre le problème, vous aurez une direction claire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!