Saya mendapatkan 500 kesalahan Server Internal saat mencoba membuat HTTP POST ke alamat tertentu di aplikasi saya. Saya telah memeriksa log server di direktori log kustom yang ditentukan dalam file host virtual, tetapi kesalahan tidak muncul di sana, jadi debugging ini sangat menyebalkan.
Bagaimana cara membuat Apache mencatat kesalahan Internal 500 ke dalam log kesalahan?
apache
error-logging
wcolbert.dll
sumber
sumber
Jawaban:
Harap Dicatat: Poster asli tidak secara khusus menanyakan tentang PHP. Semua jawaban sentris php membuat asumsi besar tidak relevan dengan pertanyaan sebenarnya.
Log kesalahan default yang bertentangan dengan log kesalahan skrip biasanya memiliki kesalahan (lebih) spesifik. seringkali izin ditolak atau bahkan penerjemah yang tidak dapat ditemukan.
Ini berarti kesalahan hampir selalu ada pada skrip Anda. misalnya Anda mengunggah skrip perl tetapi tidak memberikan izin eksekusi? atau mungkin rusak di lingkungan linux jika Anda menulis skrip di windows dan kemudian mengunggahnya ke server tanpa mengubah ujung baris, Anda akan mendapatkan kesalahan ini.
di perl jika anda lupa
Anda akan mendapatkan kesalahan ini
Ada banyak alasan untuk itu. jadi harap periksa dulu log kesalahan Anda, lalu berikan beberapa informasi lebih lanjut.
Log kesalahan default sering kali dalam
/var/log/httpd/error_log
atau/var/log/apache2/error.log
.Alasan Anda melihat log error default (seperti yang ditunjukkan di atas) adalah karena error tidak selalu diposting ke log error kustom seperti yang ditentukan di host virtual.
Mengasumsikan linux dan belum tentu perl
sumber
grep PHP /var/log/syslog
. Mungkin karena saya pernaherror_log = syslog
masuk/etc/php5/apache2/php.ini
.Mengapa 500 Kesalahan Server Internal tidak masuk ke log kesalahan apache Anda?
Kesalahan yang menyebabkan 500 Internal Server Error Anda berasal dari modul PHP. Secara default, PHP TIDAK mencatat kesalahan ini. Alasannya karena Anda ingin permintaan web berjalan secepat mungkin secara fisik dan merupakan bahaya keamanan untuk mencatat kesalahan ke layar tempat penyerang dapat mengamatinya.
Petunjuk untuk mengaktifkan Log Kesalahan Server Internal ini adalah untuk
Ubuntu 12.10
denganPHP 5.3.10
danApache/2.2.22
.Pastikan pembuatan log PHP diaktifkan:
Temukan file php.ini Anda:
Edit file itu sebagai root:
Temukan baris ini di php.ini:
Ubah baris di atas menjadi ini:
Di bagian bawah file, Anda akan melihat ini:
Titik koma adalah komentar, yang berarti garis tersebut tidak berpengaruh. Ubah garis tersebut sehingga terlihat seperti ini:
Apa yang dikomunikasikan ini ke PHP adalah bahwa kami ingin mencatat semua kesalahan ini. Peringatan, akan ada pukulan kinerja yang besar, jadi Anda tidak ingin ini diaktifkan pada produksi karena pencatatan membutuhkan kerja dan pekerjaan membutuhkan waktu, waktu membutuhkan uang.
Memulai ulang PHP dan Apache akan menerapkan perubahan tersebut.
Lakukan apa yang Anda lakukan untuk menyebabkan kesalahan 500 Server Internal lagi, dan periksa log:
Anda akan melihat kesalahan 500 di bagian akhir, seperti ini:
sumber
display_errors
mencetak kesalahan di layar .log_errors
menulis kesalahan di file log .Periksa log kesalahan php Anda yang mungkin merupakan file terpisah dari log kesalahan apache Anda.
Temukan dengan membuka
phpinfo()
dan memeriksa atribut error_log. Jika tidak diatur. Setel: https://stackoverflow.com/a/12835262/445131Mungkin post_max_size Anda terlalu kecil untuk apa yang Anda coba posting, atau salah satu pengaturan memori maksimal lainnya terlalu rendah.
sumber
Saya baru saja mengalami ini dan itu karena kesalahan konfigurasi mod_authnz_ldap di file .htaccess saya. Sama sekali tidak ada yang dicatat, tetapi saya terus mendapatkan kesalahan 500.
Jika Anda mengalami masalah khusus ini, Anda dapat mengubah level log mod_authnz_ldap seperti:
Itu akan menggunakan tingkat log debug untuk mod_authnz_ldap tetapi memperingatkan untuk yang lainnya ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel ).
sumber
Jika informasi Kesalahan Server Internal Anda tidak muncul di file log, Anda mungkin perlu memulai ulang layanan Apache .
Saya telah menemukan bahwa Apache 2.4 (setidaknya pada platform Windows) cenderung dengan keras kepala menolak untuk membersihkan file log — sebaliknya, data yang dicatat tetap berada di memori untuk waktu yang cukup lama. Itu ide yang bagus dari sudut pandang kinerja tetapi bisa membingungkan saat berkembang.
sumber
Jawaban oleh @ eric-leschinski benar.
Tetapi ada kasus lain jika API Server Anda adalah FPM / FastCGI (Default pada Centos 8 atau Anda dapat memeriksa menggunakan fungsi phpinfo ())
Pada kasus ini:
phpinfo()
dalam file php;Loaded Configuration File
param untuk melihat di mana file config untuk PHP Anda.Periksa
Server API
parameter. Jika server Anda hanya menggunakan apache handle API -> restart apache. Jika server Anda menggunakan php-fpm, Anda harus memulai ulang layanan php-fpmPeriksa file log di folder log php-fpm. misalnya
/var/log/php-fpm/www-error.log
sumber
Dalam kasus saya itu adalah direktif ErrorLog di httpd.conf. Hanya secara tidak sengaja menyadarinya setelah saya menyerah. Memutuskan untuk berbagi penemuan) Sekarang saya tahu di mana menemukan 500 kesalahan.
sumber
Tambahkan
HttpProtocolOptions Unsafe
ke file konfigurasi apache Anda dan mulai ulang server apache. Ini menunjukkan detail kesalahan.sumber
Periksa apakah versi php yang Anda jalankan cocok dengan basis kode Anda. Misalnya, lingkungan lokal Anda mungkin menjalankan php 5.4 (dan semuanya berjalan dengan baik) dan mungkin Anda menguji kode Anda pada mesin baru yang menginstal php 5.3. Jika Anda menggunakan sintaks 5.4 seperti [] untuk array () maka Anda akan mendapatkan situasi yang Anda jelaskan di atas.
sumber
Coba akses file statis. Jika ini tidak berhasil, pergilah ke semua direktori dari root "/" atau "c: \" ke direktori file Anda dan periksa apakah direktori tersebut berisi file ".htaccess".
Saya pernah meninggalkan file di "c: \" dan hasilnya paling aneh.
sumber
Harap periksa apakah Anda menonaktifkan pelaporan kesalahan di suatu tempat dalam kode Anda.
Ada tempat di kode saya di mana saya telah menonaktifkannya, jadi saya menambahkan kode debug setelahnya:
sumber