Je viens d'installer un serveur nginx + php-fpm. Tout semble bien sauf que PHP-FPM n'écrit jamais d'erreur dans son journal.
fpm.conf
[default]
listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webusr
listen.group = webusr
listen.mode = 0666
user = webusr
group = webusr
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /php/fpm/status
ping.path = /php/fpm/ping
request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/default/slow.log
chroot = /var/www/sites/webusr
catch_workers_output = yes
env[HOSTNAME] = mapsvr.mapking.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/default/error.log
php_admin_flag[log_errors] = on
nginx.conf
server
{
listen 80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/access.log rest;
include conf.d/drops.conf.inc;
location /
{
root /var/www/sites/webusr/htdocs;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on socket
#
location ~ \.php$
{
root /var/www/sites/webusr/htdocs;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /htdocs/$fastcgi_script_name;
if (-f $request_filename)
{
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
}
location = /php/fpm/status
{
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
location = /php/fpm/ping
{
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html
{
root /usr/share/nginx/html;
}
}
J'ai créé un script php erroné et exécuté, et j'ai vu la sortie d'erreur sur le navigateur Web. Le journal des erreurs nginx indique également la sortie stderr de fpm avec le même message. J'ai vérifié que l'utilisateur a l'autorisation d'écrire (j'ai même essayé 777) sur le dossier de journal désigné. Même le fichier error.log nommé a été créé avec succès par php-fpm. Cependant, le fichier journal est toujours vide, quelle que soit l'erreur scandaleuse commise à partir du script php.
Que se passe-t-il?
[J'ai trouvé la raison un peu plus tard]
C'était la permission. Le changement de propriétaire des utilisateurs des sites a résolu le problème.
Réponses:
Cela a fonctionné pour moi:
Éditer:
Le fichier à modifier est le fichier qui configure votre pool souhaité. Par défaut c'est: /etc/php-fpm.d/www.conf
la source
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
dans ce même fichier de configuration - /var/log/php-fpm/www-error.log sur CentOS 7 , par exemplesudo vi /etc/php/7.0/fpm/pool.d/www.conf
pour moiJ'ai lutté avec cela pendant longtemps avant de trouver que mes journaux php-fpm étaient écrits
/var/log/upstart/php5-fpm.log
. Cela semble être un bogue entre l'interaction entre upstart et php-fpm. Pour en savoir plus: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595la source
ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
/var/log/php7.0-fpm.log
donc,php_admin_value[error_log] = /var/log/fpm-php.www.log
redirigera vers un journal non standard ??J'ai eu un problème similaire et j'ai dû faire ce qui suit pour le
pool.d/www.conf
fichierIl n'écrivait toujours pas le fichier journal, j'ai donc dû le créer en
touch /var/log/fpm-php.www.log
définissant le bon propriétairesudo chown www-data:www-data /var/log/fpm-php.www.log
.Une fois que cela a été fait et que php5-fpm a redémarré, la journalisation a repris.
la source
Il existe plusieurs fichiers de configuration php, mais c'est celui que vous devez modifier:
décommentez la ligne qui dit:
Cela permettra à PHP stderr d'accéder au journal des erreurs de php-fpm au lieu de / dev / null.
la source
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, à/var/log/fpm-php.www.log
ou autre?J'ai rassemblé des idées à partir d'un tas de réponses ici et je présente une solution complète:
Donc, si vous configurez nginx avec php5-fpm et enregistrez un message en utilisant,
error_log()
vous pouvez le voir/var/log/nginx/error.log
par défaut.Un problème peut survenir si vous souhaitez enregistrer un grand nombre de données (par exemple un tableau) en utilisant
error_log(print_r($myArr, true));
. Si un tableau est suffisamment grand, il semble quenginx
cela tronquera votre entrée de journal.Pour contourner ce problème, vous pouvez configurer
fpm
( php.net fpm config ) pour gérer les journaux. Voici les étapes pour le faire.Ouvert
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Décommentez les deux lignes suivantes en supprimant
;
au début de la ligne: (error_log est défini ici: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Créer
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Changez la propriété de
/var/log/fpm-php.www.log
afin que php5-fpm puisse le modifier:$ sudo chown vagrant /var/log/fpm-php.www.log
Remarque:
vagrant
est l'utilisateur auquel je dois donner la propriété. Vous pouvez voir quel utilisateur cela devrait être pour vous en exécutant$ ps aux | grep php.*www
et en regardant la première colonne.Redémarrez php5-fpm:
$ sudo service php5-fpm restart
Maintenant, vos journaux seront enregistrés
/var/log/fpm-php.www.log
.la source
phpinfo()
et voyez si ces paramètres ont effectivement été repris, @SudharshanNair./var/log/fpm-php.www.log
. Ce fichier est toujours videlog_errors
erreurs sont activées, la seule autre chose à vérifier est l'autorisation et la propriété du fichier (étape 4).www-data:www-data
, toujours pas de chance. Une idée ?Il y a un bug https://bugs.php.net/bug.php?id=61045 dans php-fpm à partir de la v5.3.9 et jusqu'à maintenant (5.3.14 et 5.4.4). Le correctif promis par le développeur sera mis en ligne dans la prochaine version. Si vous ne voulez pas attendre, utilisez le correctif sur cette page et reconstruisez ou revenez à 5.3.8.
la source
Dans votre fichier fpm.conf, vous n'avez pas défini 2 variables qui sont uniquement destinées à la journalisation des erreurs.
Les variables sont
error_log
(chemin du fichier de votre fichier journal des erreurs) etlog_level
(niveau de journalisation des erreurs).la source
/usr/local/var/php
au lieu de/usr/local/php/var
? juste spéculer.dans mon cas, je montre que le journal des erreurs allait à /var/log/php-fpm/www-error.log . j'ai donc commenté cette ligne dans /etc/php-fpm.d/www.conf
et comme dit ci-dessus, j'ai également décommenté cette ligne
Maintenant, je peux voir les journaux dans le fichier spécifié par nginx.
la source
Je voudrais ajouter une autre astuce aux réponses existantes car elles n'ont pas résolu mon problème.
Faites attention à la directive nginx suivante dans votre bloc d'emplacement php:
La suppression de cette ligne a mis fin à de nombreuses heures de lutte et d'arrachage de cheveux.
Il pourrait être caché dans un répertoire conf inclus comme
/etc/nginx/default.d/php.conf
dans mon fedora.la source
Dans mon cas, php-fpm génère 500 erreurs sans aucune journalisation en raison du module php-mysql manquant. J'ai déplacé l'installation de joomla vers un autre serveur et je l'ai oublié. Donc,
apt-get install php-mysql
et le redémarrage du service l'a résolu.J'ai commencé par essayer de réparer la journalisation interrompue sans succès. Enfin,
strace
j'ai trouvé un message d'échec après des appels système liés à la base de données. Bien que mon cas ne soit pas directement lié à la question d'Op, j'espère que cela pourrait être utile.la source
Vérifiez le répertoire propriétaire de "PHP-FPM"
Tu peux faire:
la source