Я только что установил сервер nginx + php-fpm. Все выглядит хорошо, за исключением того, что PHP-FPM никогда не записывает ошибки в свой журнал.
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;
}
}
Я сделал ошибочный скрипт php и запустил, и вижу вывод ошибок в веб-браузере. Также журнал ошибок nginx сообщает о выводе stderr из fpm с тем же сообщением. Я проверил, что у пользователя есть разрешение на запись (я даже пробовал 777) в назначенную папку журнала. Даже назначенный файл error.log был успешно создан php-fpm. Тем не менее, файл журнала всегда пуст, независимо от того, какая вопиющая ошибка была допущена в скрипте php.
В чем дело?
[Нашел причину довольно долго позже]
Это было разрешение. Сменил владельца, чтобы пользователи сайта решили проблему.
Ответы:
Это сработало для меня:
Редактировать:
Файл для редактирования - это файл, который настраивает желаемый пул. По умолчанию это: /etc/php-fpm.d/www.conf
источник
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
же файла конфигурации - /var/log/php-fpm/www-error.log в CentOS 7 , напримерsudo vi /etc/php/7.0/fpm/pool.d/www.conf
для меняЯ долго боролся с этим, прежде чем обнаружил, что мои логи php-fpm записываются
/var/log/upstart/php5-fpm.log
. Кажется, это ошибка между взаимодействием upstart и php-fpm. Смотрите больше здесь: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595источник
ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
/var/log/php7.0-fpm.log
так что,php_admin_value[error_log] = /var/log/fpm-php.www.log
будете перенаправлять в нестандартный журнал ??У меня была похожая проблема, и мне пришлось сделать следующее в
pool.d/www.conf
файлОн все еще не записывал файл журнала, поэтому мне пришлось создать его,
touch /var/log/fpm-php.www.log
указав правильного владельцаsudo chown www-data:www-data /var/log/fpm-php.www.log
.Как только это было сделано, и php5-fpm перезапустился, регистрация была возобновлена.
источник
Существует несколько конфигурационных файлов php, но это тот, который вам нужно отредактировать:
раскомментируйте строку, которая говорит:
Это позволит PHPs stderr перейти в журнал ошибок php-fpm вместо / dev / null.
источник
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, в/var/log/fpm-php.www.log
или другом?Я собрал идеи из множества ответов здесь и представляю комплексное решение:
Итак, если вы настроили nginx с php5-fpm и зарегистрировали сообщение, используя его,
error_log()
вы можете увидеть его/var/log/nginx/error.log
по умолчанию.Проблема может возникнуть, если вы хотите регистрировать много данных (скажем, массив), используя
error_log(print_r($myArr, true));
. Если массив достаточно велик, похоже, чтоnginx
будет обрезана ваша запись в журнале.Чтобы обойти это, вы можете настроить
fpm
( php.net fpm config ) для управления журналами. Вот шаги, чтобы сделать это.Открыть
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Раскомментируйте следующие две строки, удалив
;
в начале строки: (здесь определен error_log: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Создать
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Измените владельца
/var/log/fpm-php.www.log
так, чтобы php5-fpm мог его редактировать:$ sudo chown vagrant /var/log/fpm-php.www.log
Примечание:
vagrant
пользователь, которому я должен передать право собственности. Вы можете увидеть, каким пользователем это должно быть для вас, запустив$ ps aux | grep php.*www
и посмотрев на первый столбец.Перезапустите php5-fpm:
$ sudo service php5-fpm restart
Теперь ваши логи будут в
/var/log/fpm-php.www.log
.источник
phpinfo()
и посмотрите, действительно ли эти настройки были выбраны, @SudharshanNair./var/log/fpm-php.www.log
. Тем не менее этот файл пустlog_errors
ошибки, единственное, что нужно проверить - это разрешение и владение файлом (шаг 4).www-data:www-data
, Все еще не повезло. Любая идея ?Существует ошибка https://bugs.php.net/bug.php?id=61045 в php-fpm с версии 5.3.9 и до настоящего времени (5.3.14 и 5.4.4). Разработчик обещал, что исправление выйдет в свет в следующем выпуске. Если вы не хотите ждать - используйте патч на этой странице и перестройте или откатитесь до 5.3.8.
источник
В вашем файле fpm.conf вы не установили 2 переменные, которые предназначены только для регистрации ошибок.
Переменные
error_log
(путь к файлу журнала ошибок) иlog_level
(уровень регистрации ошибок).источник
/usr/local/var/php
вместо/usr/local/php/var
? просто размышлять.в моем случае я показываю, что журнал ошибок собирался в /var/log/php-fpm/www-error.log . поэтому я прокомментировал эту строку в /etc/php-fpm.d/www.conf
и, как сказано выше, я также раскомментировал эту строку
Теперь я могу видеть логи в файле, указанном nginx.
источник
Я хотел бы добавить еще один совет к существующим ответам, потому что они не решили мою проблему.
Не упустите следующую директиву nginx в вашем блоке местоположения php:
Удаление этой линии положило конец многим часам борьбы и дергания за волосы.
Это может быть скрыто в некотором каталоге conf, как
/etc/nginx/default.d/php.conf
в моей Fedora.источник
В моем случае php-fpm выдает ошибку 500 без какой-либо регистрации из-за отсутствия модуля php-mysql. Я перенес установку Joomla на другой сервер и забыл об этом. Так
apt-get install php-mysql
и служба перезапуска решила это.Я начал с того, что пытался исправить сломанное ведение журнала без успеха. Наконец,
strace
я нашел сообщение об ошибке после системных вызовов, связанных с БД. Хотя мой случай не имеет прямого отношения к вопросу оп, я надеюсь, что он может быть полезен.источник
Проверьте каталог владельца "PHP-FPM"
Ты можешь сделать:
источник