Saya baru saja menginstal server nginx + php-fpm. Semuanya tampak baik kecuali bahwa PHP-FPM tidak pernah menulis kesalahan pada log-nya.
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;
}
}
Saya telah membuat skrip php yang salah dan menjalankan, dan melihat output kesalahan di browser web. Juga log kesalahan nginx menyatakan stderr output dari fpm dengan pesan yang sama. Saya telah memeriksa apakah pengguna telah menulis (saya bahkan sudah mencoba 777) izin ke folder log yang ditunjuk. Bahkan file error.log yang ditunjuk telah berhasil dibuat oleh php-fpm. Namun, file log selalu kosong, tidak peduli kesalahan apa yang dibuat dari skrip php.
Apa yang sedang terjadi?
[Menemukan alasannya beberapa saat kemudian]
Itu izin. Mengubah pemilik ke pengguna situs memecahkan masalah.
Jawaban:
Ini bekerja untuk saya:
Edit:
File yang akan diedit adalah file yang mengonfigurasi kumpulan yang Anda inginkan. Secara default-nya: /etc/php-fpm.d/www.conf
sumber
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
file konfigurasi yang sama - /var/log/php-fpm/www-error.log pada CentOS 7 , misalnyasudo vi /etc/php/7.0/fpm/pool.d/www.conf
untuk sayaSaya berjuang dengan ini untuk waktu yang lama sebelum menemukan log php-fpm saya ditulis
/var/log/upstart/php5-fpm.log
. Tampaknya menjadi bug antara bagaimana pemula dan php-fpm berinteraksi. Lihat lebih lanjut di sini: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595sumber
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
apakah akan mengarahkan ulang ke log non-standar ??Saya memiliki masalah serupa dan harus melakukan hal berikut ke
pool.d/www.conf
fileItu masih belum menulis file log jadi saya benar-benar harus membuatnya dengan
touch /var/log/fpm-php.www.log
menetapkan pemilik yang benarsudo chown www-data:www-data /var/log/fpm-php.www.log
.Setelah ini selesai, dan php5-fpm dimulai kembali, logging dilanjutkan.
sumber
Ada beberapa file konfigurasi php, tetapi INI yang perlu Anda edit:
batalkan komentar pada baris yang mengatakan:
Itu akan memungkinkan PHP stderr untuk pergi ke log kesalahan php-fpm bukan / dev / null.
sumber
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, at/var/log/fpm-php.www.log
atau lainnya?Saya mengumpulkan wawasan dari banyak jawaban di sini dan saya menyajikan solusi komprehensif:
Jadi, jika Anda mengatur nginx dengan php5-fpm dan mencatat pesan menggunakan
error_log()
Anda dapat melihatnya secara/var/log/nginx/error.log
default.Masalah dapat muncul jika Anda ingin mencatat banyak data (katakanlah array) menggunakan
error_log(print_r($myArr, true));
. Jika array cukup besar, tampaknyanginx
akan memotong entri log Anda.Untuk menyiasatinya, Anda dapat mengonfigurasi
fpm
( php.net fpm config ) untuk mengelola log. Inilah langkah-langkah untuk melakukannya.Buka
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Batalkan komentar dua baris berikut dengan menghapus
;
di awal baris: (error_log didefinisikan di sini: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Buat
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Ubah kepemilikan
/var/log/fpm-php.www.log
sehingga php5-fpm dapat mengeditnya:$ sudo chown vagrant /var/log/fpm-php.www.log
Catatan:
vagrant
adalah pengguna yang harus saya berikan kepemilikan. Anda dapat melihat pengguna ini untuk Anda dengan menjalankan$ ps aux | grep php.*www
dan melihat kolom pertama.Mulai ulang php5-fpm:
$ sudo service php5-fpm restart
Sekarang log Anda akan berada di
/var/log/fpm-php.www.log
.sumber
phpinfo()
dan lihat apakah pengaturan ini benar-benar diambil, @SudharshanNair./var/log/fpm-php.www.log
. Tetap file ini kosonglog_errors
kesalahan diaktifkan, satu-satunya hal lain yang perlu diperiksa adalah izin dan kepemilikan file (langkah 4).www-data:www-data
, Masih belum berhasil. Ada ide ?Ada bug https://bugs.php.net/bug.php?id=61045 di php-fpm dari v5.3.9 dan sampai sekarang (5.3.14 dan 5.4.4). Pengembang berjanji memperbaiki akan ditayangkan dalam rilis berikutnya. Jika Anda tidak ingin menunggu - gunakan tambalan pada halaman itu dan bangun kembali atau kembalikan ke 5.3.8.
sumber
Dalam file fpm.conf Anda, Anda belum menetapkan 2 variabel yang hanya untuk logging kesalahan.
Variabelnya adalah
error_log
(path file dari file log kesalahan Anda) danlog_level
(tingkat logging kesalahan).sumber
/usr/local/var/php
bukan/usr/local/php/var
? hanya berspekulasi.dalam kasus saya, saya menunjukkan bahwa log kesalahan akan ke /var/log/php-fpm/www-error.log . jadi saya berkomentar di baris ini di /etc/php-fpm.d/www.conf
dan seperti yang dikatakan di atas saya juga menghapus tanda komentar pada baris ini
Sekarang saya bisa melihat log dalam file yang ditentukan oleh nginx.
sumber
Saya ingin menambahkan tip lain ke jawaban yang ada karena mereka tidak menyelesaikan masalah saya.
Perhatikan arahan nginx berikut di blok lokasi php Anda:
Menghilangkan garis ini telah mengakhiri berjam-jam berjuang dan menarik rambut.
Itu bisa disembunyikan di beberapa direktori conf yang disertakan seperti
/etc/nginx/default.d/php.conf
di fedora saya.sumber
Dalam kasus saya, php-fpm menghasilkan 500 kesalahan tanpa pencatatan karena modul php-mysql hilang. Saya memindahkan instalasi joomla ke server lain dan melupakannya. Jadi
apt-get install php-mysql
dan restart layanan menyelesaikannya.Saya mulai dengan mencoba memperbaiki pembalakan yang rusak tanpa hasil. Akhirnya dengan
strace
saya menemukan pesan gagal setelah panggilan sistem terkait db. Meskipun kasus saya tidak berhubungan langsung dengan pertanyaan op, saya harap ini bisa bermanfaat.sumber
Periksa direktori Pemilik "PHP-FPM"
Anda dapat melakukan:
sumber