Maison > développement back-end > PHP7 > Configuration de php.ini, php-fpm et www.conf en PHP7

Configuration de php.ini, php-fpm et www.conf en PHP7

藏色散人
Libérer: 2023-02-17 12:34:02
avant
5115 Les gens l'ont consulté

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

● Pour les serveurs dédiés, pm peut être réglé sur statique.

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 processus php-fpm ouverts en mode statique, et il limite le processus maximum de php- fpm en mode dynamique Nombre (notez ici que la valeur de pm.max_spare_servers ne peut être qu'inférieure ou égale à pm.max_children)

● 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

● Garantir le nombre maximum de processus inactifs si le nombre de processus inactifs est supérieur à cette valeur, il sera nettoyé

.

● 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

● L'URL de la page d'état FPM Si elle n'est pas définie, la page d'état n'est pas accessible. Valeur par défaut : aucune. La surveillance Munin utilisera

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 =

         

● Nettoyer l'environnement

catch_workers_output = yes

variables_order

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 un

temps 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!

Étiquettes associées:
source:juejin.im
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal