Właśnie zainstalowałem serwer nginx + php-fpm. Wszystko wydaje się w porządku, poza tym, że PHP-FPM nigdy nie zapisuje błędów w swoim dzienniku.
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;
}
}
Zrobiłem błędny skrypt php i uruchomiłem go i widzę błąd w przeglądarce internetowej. Również dziennik błędów nginx podaje wyjście stderr z fpm z tym samym komunikatem. Sprawdziłem, czy użytkownik ma uprawnienia do zapisu (próbowałem nawet 777) do wyznaczonego folderu dziennika. Nawet wyznaczony plik error.log został pomyślnie utworzony przez php-fpm. Jednak plik dziennika jest zawsze pusty, niezależnie od tego, jaki skandaliczny błąd został popełniony w skrypcie php.
Co się dzieje?
[Przyczyny znalazłem jakiś czas później]
To było pozwolenie. Zmiana właściciela na użytkowników stron rozwiązała problem.
Odpowiedzi:
To zadziałało dla mnie:
Edytować:
Plik do edycji to plik konfigurujący żądaną pulę. Domyślnie jest to: /etc/php-fpm.d/www.conf
źródło
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
w tym samym pliku konfiguracyjnym - /var/log/php-fpm/www-error.log na CentOS 7 , np.sudo vi /etc/php/7.0/fpm/pool.d/www.conf
dla mnieWalczyłem z tym przez długi czas, zanim stwierdziłem, że moje dzienniki php-fpm były zapisywane
/var/log/upstart/php5-fpm.log
. Wydaje się, że jest to błąd między interakcją upstart i php-fpm. Zobacz więcej tutaj: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595źródło
ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
/var/log/php7.0-fpm.log
więcphp_admin_value[error_log] = /var/log/fpm-php.www.log
przekieruje do niestandardowego dziennika?Miałem podobny problem i musiałem wykonać następujące czynności w
pool.d/www.conf
plikuWciąż nie zapisywał pliku dziennika, więc musiałem go utworzyć,
touch /var/log/fpm-php.www.log
ustawiając odpowiedniego właścicielasudo chown www-data:www-data /var/log/fpm-php.www.log
.Po wykonaniu tej czynności i ponownym uruchomieniu php5-fpm, rejestracja została wznowiona.
źródło
Istnieje wiele plików konfiguracyjnych php, ale TO jest ten, który musisz edytować:
odkomentuj wiersz, który mówi:
Pozwoli to stderr PHP przejść do dziennika błędów php-fpm zamiast / dev / null.
źródło
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, at/var/log/fpm-php.www.log
lub inny?Zebrałem tutaj spostrzeżenia z szeregu odpowiedzi i przedstawiam kompleksowe rozwiązanie:
Tak więc, jeśli skonfigurujesz nginx z php5-fpm i zarejestrujesz wiadomość za pomocą
error_log()
, możesz zobaczyć ją/var/log/nginx/error.log
domyślnie.Problem może się pojawić, jeśli chcesz rejestrować wiele danych (powiedzmy tablicę) za pomocą
error_log(print_r($myArr, true));
. Jeśli tablica jest wystarczająco duża, wydaje się, żenginx
spowoduje to obcięcie wpisu dziennika.Aby obejść ten problem, możesz skonfigurować
fpm
( php.net fpm config ) do zarządzania dziennikami. Oto kroki, aby to zrobić.Otwarte
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Odkomentuj następujące dwa wiersze, usuwając
;
na początku wiersza: (error_log jest zdefiniowany tutaj: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Utwórz
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Zmień własność
/var/log/fpm-php.www.log
, aby php5-fpm mógł go edytować:$ sudo chown vagrant /var/log/fpm-php.www.log
Uwaga:
vagrant
to użytkownik, któremu muszę przyznać prawo własności. Możesz zobaczyć, jakiego użytkownika to powinien być dla Ciebie, uruchamiając$ ps aux | grep php.*www
i patrząc na pierwszą kolumnę.Zrestartuj php5-fpm:
$ sudo service php5-fpm restart
Teraz twoje logi będą dostępne
/var/log/fpm-php.www.log
.źródło
phpinfo()
i zobacz, czy te ustawienia rzeczywiście zostały odebrane, @SudharshanNair./var/log/fpm-php.www.log
. Wciąż ten plik jest pustylog_errors
błędy są włączone, jedyną inną rzeczą do sprawdzenia jest uprawnienia i własność pliku (krok 4).www-data:www-data
nadal nie mam szczęścia. Dowolny pomysł ?Występuje błąd https://bugs.php.net/bug.php?id=61045 w php-fpm od wersji 5.3.9 i do teraz (5.3.14 i 5.4.4). Obiecana przez programistę poprawka zostanie uruchomiona w następnej wersji. Jeśli nie chcesz czekać - użyj łatki na tej stronie i przebuduj lub cofnij do 5.3.8.
źródło
W swoim pliku fpm.conf nie ustawiłeś 2 zmiennych, które służą tylko do logowania błędów.
Zmienne to
error_log
(ścieżka do pliku dziennika błędów) ilog_level
(poziom rejestrowania błędów).źródło
/usr/local/var/php
zamiast/usr/local/php/var
? tylko spekulacje.w moim przypadku pokazuję, że dziennik błędów zmierzał do /var/log/php-fpm/www-error.log . więc skomentowałem tę linię w /etc/php-fpm.d/www.conf
i jak wspomniano powyżej, również odkomentowałem tę linię
Teraz widzę dzienniki w pliku określonym przez nginx.
źródło
Chciałbym dodać kolejną wskazówkę do istniejących odpowiedzi, ponieważ nie rozwiązały one mojego problemu.
Uważaj na następującą dyrektywę nginx w bloku lokalizacji php:
Usunięcie tej żyłki zakończyło wiele godzin walki i wyrywania włosów.
Może być ukryty w jakimś dołączonym katalogu conf, takim jak
/etc/nginx/default.d/php.conf
moja fedora.źródło
W moim przypadku php-fpm wyświetla błąd 500 bez żadnego logowania z powodu braku modułu php-mysql. Przeniosłem instalację Joomla na inny serwer i zapomniałem o tym. Więc
apt-get install php-mysql
restart usługi rozwiązał to.Zacząłem od próby naprawienia zepsutego logowania bez powodzenia. Wreszcie
strace
znalazłem komunikat o niepowodzeniu po wywołaniach systemowych związanych z db. Chociaż moja sprawa nie jest bezpośrednio związana z pytaniem op, mam nadzieję, że może się przydać.źródło
Sprawdź katalog właściciela „PHP-FPM”
Możesz to zrobić:
źródło