Acabei de instalar um servidor nginx + php-fpm. Tudo parece bem, exceto que o PHP-FPM nunca grava erros em seu log.
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;
}
}
Eu criei um script php incorreto e executei, e vejo a saída de erro no navegador da web. Além disso, o log de erros do nginx indica a saída stderr do fpm com a mesma mensagem. Verifiquei se o usuário tem permissão de gravação (eu até tentei 777) na pasta de log designada. Até o arquivo error.log designado foi criado com sucesso pelo php-fpm. No entanto, o arquivo de log está sempre vazio, independentemente do erro ultrajante que tenha sido feito no script php.
O que está acontecendo?
[Encontrei a razão bastante tempo depois]
Foi permissão. Mudou o proprietário para os usuários dos sites resolveu o problema.
Respostas:
Isso funcionou para mim:
Editar:
O arquivo a editar é o arquivo que configura o pool desejado. Por padrão, é: /etc/php-fpm.d/www.conf
fonte
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
desse mesmo arquivo de configuração - /var/log/php-fpm/www-error.log no CentOS 7 , por exemplosudo vi /etc/php/7.0/fpm/pool.d/www.conf
para mimEu lutei com isso por um longo tempo antes de encontrar meus logs php-fpm estavam sendo gravados
/var/log/upstart/php5-fpm.log
. Parece ser um erro entre como o iniciante e o php-fpm interagem. Veja mais aqui: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595fonte
ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
/var/log/php7.0-fpm.log
assim,php_admin_value[error_log] = /var/log/fpm-php.www.log
irá redirecionar para log não-padrão ??Eu tive um problema semelhante e tive que fazer o seguinte no
pool.d/www.conf
arquivoAinda não estava gravando o arquivo de log, então tive que criá-lo
touch /var/log/fpm-php.www.log
definindo o proprietário corretosudo chown www-data:www-data /var/log/fpm-php.www.log
.Feito isso, e o php5-fpm reiniciado, o registro foi retomado.
fonte
Existem vários arquivos de configuração php, mas este é o que você precisa editar:
descomente a linha que diz:
Isso permitirá que o PHP stderr acesse o log de erros do php-fpm em vez de / dev / null.
fonte
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, at/var/log/fpm-php.www.log
ou outro?Reuni idéias de várias respostas aqui e apresento uma solução abrangente:
Portanto, se você configurar o nginx com php5-fpm e registrar uma mensagem usando,
error_log()
poderá vê-la/var/log/nginx/error.log
por padrão.Um problema pode surgir se você desejar registrar muitos dados (por exemplo, uma matriz) usando
error_log(print_r($myArr, true));
. Se uma matriz for grande o suficiente, parece quenginx
truncará sua entrada de log.Para contornar isso, você pode configurar
fpm
( php.net fpm config ) para gerenciar logs. Aqui estão as etapas para fazer isso.Abrir
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Descomente as duas linhas a seguir removendo
;
no início da linha: (error_log é definido aqui: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Criar
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Altere a propriedade de
/var/log/fpm-php.www.log
para que o php5-fpm possa editá-lo:$ sudo chown vagrant /var/log/fpm-php.www.log
Nota:
vagrant
é o usuário ao qual eu preciso dar posse. Você pode ver qual usuário isso deve ser para você executando$ ps aux | grep php.*www
e olhando a primeira coluna.Reinicie o php5-fpm:
$ sudo service php5-fpm restart
Agora seus logs estará em
/var/log/fpm-php.www.log
.fonte
phpinfo()
e veja se essas configurações foram realmente atendidas, @SudharshanNair./var/log/fpm-php.www.log
. Ainda este arquivo está vaziolog_errors
erros estiverem ativados, a única outra coisa a verificar é a permissão e a propriedade do arquivo (etapa 4).www-data:www-data
: Ainda sem sorte. Qualquer ideia ?Existe um bug https://bugs.php.net/bug.php?id=61045 no php-fpm da v5.3.9 e até agora (5.3.14 e 5.4.4). A correção prometida pelo desenvolvedor será lançada no próximo lançamento. Se você não quiser esperar - use o patch nessa página e reconstrua ou faça o rollback para 5.3.8.
fonte
No seu arquivo fpm.conf, você não definiu 2 variáveis, que são apenas para registro de erros.
As variáveis são
error_log
(caminho do arquivo de log de erros) elog_level
(nível de log de erros).fonte
/usr/local/var/php
vez de/usr/local/php/var
? apenas especulando.no meu caso, mostro que o log de erros estava indo para /var/log/php-fpm/www-error.log . então comentei essa linha em /etc/php-fpm.d/www.conf
e como dito acima eu também descomentei esta linha
Agora eu posso ver os logs no arquivo especificado por nginx.
fonte
Gostaria de adicionar outra dica às respostas existentes, porque elas não resolveram o meu problema.
Cuidado com a seguinte diretiva nginx no seu bloco de localização php:
A remoção dessa linha acabou com muitas horas de luta e arrancamento dos cabelos.
Pode estar oculto em algum diretório conf incluído, como
/etc/nginx/default.d/php.conf
no meu fedora.fonte
No meu caso, o php-fpm gera um erro 500 sem nenhum log devido à falta do módulo php-mysql. Mudei a instalação do joomla para outro servidor e esqueci. Então,
apt-get install php-mysql
e reiniciar o serviço resolveu.Comecei tentando consertar o log quebrado sem sucesso. Finalmente,
strace
encontrei a mensagem de falha após chamadas do sistema relacionadas ao banco de dados. Embora meu caso não esteja diretamente relacionado à pergunta do op, espero que seja útil.fonte
Verifique o diretório do proprietário do "PHP-FPM"
Você pode fazer:
fonte