Error 500 Internal Server Error: Penyebab & Solusi (nginx)
Poin penting
HTTP 500 Internal Server Error berarti server "menemui kondisi tak terduga yang membuatnya tidak dapat memenuhi permintaan" (RFC 9110): ada yang rusak di sisi server, dan server tidak menyebutkan apa. Sebagai pengunjung, muat ulang sekali setelah semenit dan cek apakah situs down untuk semua orang; perbaikannya ada di tangan pemilik. Sebagai pemilik, baca error log lebih dulu. Di nginx, 500 biasanya datang dari aplikasi di belakangnya (PHP, Node, Python); di Apache, periksa .htaccess, batas PHP, dan plugin.
Periksa sekarang

Mulai membaca
- Apa Itu HTTP Error 500?
- Tampilan Error 500
- 500 Internal Server Error di nginx
- Penyebab Umum HTTP Error 500
- Cara Memperbaiki Error 500 (Sebagai Pengunjung)
- Solusi 1: Periksa Error Log Server
- Solusi 2: Periksa dan Perbaiki .htaccess
- Solusi 3: Perbaiki File Permission
- Solusi 4: Tingkatkan Batas Memori dan Eksekusi PHP
- Solusi 5: Nonaktifkan Plugin dan Tema (CMS)
- Solusi 6: Periksa Koneksi Database dan Perbaiki
- Solusi 7: Periksa Kompatibilitas Versi PHP
- Solusi 8: Periksa Ruang Disk
- 500 vs 502 vs 503 vs 504: Apa Perbedaannya?
- Dampak Error 500 terhadap SEO
- Cara Mencegah Error 500
- Pertanyaan yang Sering Diajukan
Apa Itu HTTP Error 500?
HTTP error 500 (Internal Server Error) berarti ada yang rusak di web server saat memproses permintaan Anda, dan server tidak menyebutkan apa. Ini adalah error server yang paling umum.
Standar HTTP mendefinisikannya dalam satu kalimat: "The 500 (Internal Server Error) status code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request" (RFC 9110 §15.6.1), yaitu server menemui kondisi tak terduga yang membuatnya tidak dapat memenuhi permintaan. Berbeda dengan 503, error ini tidak menyebutkan apakah masalahnya bersifat sementara.
Hampir selalu penyebabnya adalah bug, konfigurasi yang salah, atau crash pada kode di sisi server, bukan sesuatu yang dilakukan pengunjung. Perbaikannya harus datang dari pemilik atau administrator situs.
Lihat kode status yang dikembalikan sebuah halaman
Tampilan Error 500
Tampilannya bergantung pada server dan aplikasinya:
- 500 Internal Server Error — baris status standar
- 500 Internal Server Error dengan tulisan "nginx" di bawahnya — halaman error bawaan nginx
- The server encountered an internal error or misconfiguration and was unable to complete your request. — halaman bawaan Apache
- Ada eror serius pada situs web Anda. — halaman fatal error WordPress pada versi bahasa Indonesia (dalam bahasa Inggris: "There has been a critical error on this website.")
- HTTP Error 500.19 - Internal Server Error — IIS, dengan angka setelah titik sebagai alasannya (500.19: data konfigurasi tidak valid)
- Halaman ini tidak berfungsi · example.com saat ini tidak dapat menangani permintaan ini. · HTTP ERROR 500 — Chrome, saat respons 500 tidak punya halaman sendiri
- Request failed with status code 500 — Axios dan kode JavaScript lain yang memanggil API
- 500. That's an error. — halaman error bawaan Google
500 Internal Server Error di nginx
Sering kali nginx hanya meneruskan 500 yang dikembalikan aplikasi di belakangnya (PHP-FPM, Node.js, Python); pada PHP-FPM, pesan error PHP sendiri masuk ke log nginx. nginx juga membuat 500 sendiri dalam beberapa kasus. Baris error log yang perlu dicari:
| Baris error log nginx | Artinya |
|---|---|
| FastCGI sent in stderr: "PHP message: PHP Fatal error: …" | PHP crash; pesannya menyebut file dan barisnya (error PHP-FPM masuk ke log nginx) |
| rewrite or internal redirection cycle while internally redirecting to … | Aturan try_files atau rewrite berputar ke dirinya sendiri di dalam nginx, sering karena fallback seperti /index.html yang tidak ada (loop yang diikuti browser akan menampilkan ERR_TOO_MANY_REDIRECTS) |
| open() "/etc/nginx/.htpasswd" failed (13: Permission denied) | nginx tidak bisa membaca file password auth_basic (file yang tidak ada justru menghasilkan 403) |
| pwritev() "/var/lib/nginx/body/…" failed (28: No space left on device) | nginx tidak bisa menyimpan upload atau POST besar ke disk: disk penuh atau folder sementara yang tidak bisa ditulisinya |
| (tidak ada apa pun untuk permintaan itu) | Aplikasi Node.js atau Python yang mengembalikan 500 dan nginx meneruskannya: baca log aplikasi itu sendiri |
# What did nginx log?
sudo tail -n 50 /var/log/nginx/error.log
# Look for loops in the loaded config
sudo nginx -T | grep -nE 'try_files|rewrite'(Sumber: kode nginx sendiri; backend yang crash atau kelebihan beban menghasilkan 502 atau 504, bukan 500.)
Penyebab Umum HTTP Error 500
Error 500 bisa berasal dari puluhan masalah di sisi server. Yang paling umum:
- File .htaccess yang rusak — satu direktif yang tidak valid atau RewriteRule yang salah membuat Apache menjawab 500 untuk direktori itu dan semua yang ada di bawahnya.
- Fatal error PHP — kesalahan sintaks, exception yang tidak ditangkap, atau pemanggilan fungsi yang tidak terdefinisi menghentikan script.
- Batas memori atau waktu PHP — script yang melewati
memory_limit(128M secara default) ataumax_execution_time(30 detik) dihentikan. - Baris
php_valuedi server PHP-FPM — baris itu hanya berfungsi dengan mod_php milik Apache; di bawah PHP-FPM, Apache menolaknya dengan 500. - File permission yang salah — PHP tidak bisa membaca file yang di-include, atau hosting suPHP/suEXEC menolak file yang bisa ditulisi semua orang (777). (File yang tidak bisa dibaca web server itu sendiri menghasilkan 403.)
- Plugin atau tema — ekstensi WordPress, Joomla, atau Drupal yang baru atau baru diperbarui dan membuat seluruh situs crash.
- Kegagalan koneksi database — kredensial salah, server database berhenti, atau terlalu banyak koneksi.
- File inti yang rusak — setelah pembaruan gagal atau upload yang terputus.
- Disk penuh — server tidak bisa menulis log, sesi, atau file sementara.
- Pemicu khas nginx — loop rewrite, file password yang tidak terbaca, atau penulisan file sementara yang gagal (sering karena disk penuh); lihat bagian nginx di atas.
Cara Memperbaiki Error 500 (Sebagai Pengunjung)
Jika Anda melihat error 500 di website orang lain, masalahnya ada di sisi server — bukan di sisi Anda. Namun, ada beberapa hal yang bisa Anda coba sebelum menyerah.
- Muat ulang sekali setelah semenit (F5, atau Cmd+R di Mac). Banyak error 500 hanya berlangsung selama deploy atau restart.
- Cek apakah situs down untuk semua orang — Cek Website Down membuka halaman dari 11 lokasi, dan Cek HTTP Header menampilkan kode status persis yang diterima server kami.
- Hapus cookie situs itu, atau coba jendela private. Cookie sesi yang rusak bisa membuat sebagian aplikasi error di setiap halaman, hanya untuk Anda.
- Coba lagi nanti — perbaikannya ada di server, jadi beri waktu kepada pemiliknya.
- Beri tahu pemilik situs jika berlangsung berjam-jam, sertakan alamat halaman dan waktu kejadiannya.
Solusi 1: Periksa Error Log Server
Error log adalah tool debugging terpenting untuk error 500. Log memberitahu Anda persis apa yang salah, termasuk path file, nomor baris, dan pesan error. Selalu periksa log terlebih dahulu sebelum mencoba hal lain.
# Apache (PHP errors appear here too, as "AH01071: Got error 'PHP message: …'")
sudo tail -n 100 /var/log/apache2/error.log # Debian/Ubuntu
sudo tail -n 100 /var/log/httpd/error_log # RHEL/Alma/Rocky
# nginx (PHP errors appear here as "FastCGI sent in stderr")
sudo tail -n 100 /var/log/nginx/error.log
# PHP errors on RHEL-family PHP-FPM
sudo tail -n 100 /var/log/php-fpm/www-error.log
# PHP-FPM process log (pool restarts, pm.max_children)
sudo tail -n 100 /var/log/php8.3-fpm.log # Debian/Ubuntu
# WordPress debug log (with WP_DEBUG_LOG on)
tail -n 100 /path/to/wordpress/wp-content/debug.logSolusi 2: Periksa dan Perbaiki .htaccess
.htaccess yang rusak adalah penyebab klasik error 500 di Apache: satu salah ketik, direktif yang tidak didukung server, atau RewriteRule yang salah bisa melumpuhkan direktori. Error log Apache menyebut file .htaccess dan direktif yang salah, misalnya Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration.
Tes tercepat adalah mengganti nama file itu untuk sementara. Jika situs bisa dimuat setelah file diganti namanya, .htaccess-lah penyebabnya.
# Rename to disable .htaccess
mv .htaccess .htaccess_backup
# If site loads, regenerate a clean .htaccess
# For WordPress, go to Settings > Permalinks and click SaveSolusi 3: Perbaiki File Permission
Permission menyebabkan 500 saat PHP tidak bisa membaca file yang di-include, atau di hosting suPHP/suEXEC yang menolak file yang bisa ditulisi semua orang. Pengaturan yang lazim adalah 644 untuk file dan 755 untuk folder. Jangan pernah memakai 777: itu risiko keamanan, dan di hosting suEXEC/suPHP angka itu saja sudah menyebabkan 500.
# Set correct directory permissions
find /path/to/webroot -type d -exec chmod 755 {} \;
# Set correct file permissions
find /path/to/webroot -type f -exec chmod 644 {} \;
# WordPress wp-config.php (extra security; 440 only if the PHP user owns the file or is in its group)
chmod 440 wp-config.phpSolusi 4: Tingkatkan Batas Memori dan Eksekusi PHP
PHP menghentikan script yang melewati batas memori atau waktu eksekusi maksimum, dan pengunjung mendapat 500. Nilai default, memori 128M dan 30 detik, sering terlalu rendah untuk halaman yang berat.
Naikkan di tempat server Anda membacanya. Untuk PHP-FPM, edit php.ini milik FPM (misalnya /etc/php/8.3/fpm/php.ini) dan reload php-fpm; perubahan .user.ini bisa butuh hingga 5 menit untuk berlaku.
# Option 1: php.ini (best)
memory_limit = 256M
max_execution_time = 300
# Option 2: .htaccess (Apache with mod_php only; under PHP-FPM these lines cause a 500)
php_value memory_limit 256M
php_value max_execution_time 300
# Option 3: .user.ini (PHP-FPM and other FastCGI setups)
memory_limit = 256M
# Option 4: wp-config.php (WordPress)
define( 'WP_MEMORY_LIMIT', '256M' );Solusi 5: Nonaktifkan Plugin dan Tema (CMS)
Jika Anda menggunakan WordPress, Joomla, atau CMS lainnya, plugin atau tema yang bermasalah adalah salah satu penyebab paling umum error 500. Cara tercepat untuk menguji adalah menonaktifkan semua plugin sekaligus, lalu mengaktifkannya kembali satu per satu.
# Disable all WordPress plugins (via the file system)
cd /path/to/wordpress/wp-content
mv plugins plugins_disabled
# Or with WP-CLI, without loading the plugin that crashes the site
wp plugin deactivate --all --skip-plugins --skip-themes
# Switch to a default theme (installs it if it was deleted)
wp theme install twentytwentyfive --activate --skip-plugins --skip-themes
# Check WordPress's own files, and reinstall them without touching wp-content
wp core verify-checksums
wp core download --skip-content --forceSolusi 6: Periksa Koneksi Database dan Perbaiki
Error 500 bisa terjadi ketika aplikasi tidak dapat terhubung ke database-nya. Ini terjadi ketika kredensial salah, server database down, atau tabel rusak.
Pertama verifikasi kredensial database Anda di file konfigurasi (wp-config.php untuk WordPress, .env untuk Laravel). Kemudian uji koneksi dan perbaiki tabel yang rusak jika diperlukan.
# Test the MySQL connection
mysql -u username -p -h localhost database_name -e "SELECT 1;"
# Check tables (REPAIR only fixes MyISAM/Aria tables; for InnoDB, restore from a backup)
mysqlcheck -u username -p --check --auto-repair database_name
# WordPress: add to wp-config.php, then visit /wp-admin/maint/repair.php
# Remove this line when you're done: the repair page needs no login.
define( 'WP_ALLOW_REPAIR', true );Solusi 7: Periksa Kompatibilitas Versi PHP
Kode yang ditulis untuk PHP versi lama bisa kena fatal error di versi yang lebih baru (atau sebaliknya). Setelah upgrade PHP, biang keladinya biasanya fungsi yang dihapus dan perilaku yang berubah; fungsi deprecated hanya menimbulkan notice.
Periksa versi PHP yang sebenarnya dijalankan situs Anda. php -v di command line bisa menampilkan PHP yang berbeda dari yang dipakai situs, jadi lihat juga di panel hosting atau halaman phpinfo() sementara:
# Command-line PHP (may differ from the site's PHP-FPM)
php -v
# PHP-FPM versions installed (Debian/Ubuntu)
ls /etc/php/
# Modules loaded in the command-line PHP
php -mSolusi 8: Periksa Ruang Disk
Saat server kehabisan ruang disk (atau inode), server tidak bisa menulis log, file sementara, atau data sesi, dan permintaan mulai gagal dengan 500.
# Check disk space, and inodes (they can run out too)
df -h
df -i
# What's using the space?
sudo du -sh /var/log /tmp
# Free space without deleting the log you're reading
sudo find /var/log -name "*.gz" -mtime +14 -delete
sudo journalctl --vacuum-size=200M500 vs 502 vs 503 vs 504: Apa Perbedaannya?
Pembedanya: 500 = server rusak di dalam. 502 = proxy menerima balasan tak berguna dari backend. 503 = server hidup tetapi sibuk. 504 = proxy menyerah menunggu. Anda bisa mengecek kode status persis yang dikembalikan server Anda dengan Cek HTTP Header dari DNS Robot.
Jika errornya justru 502, aplikasinya mungkin baik-baik saja dan masalahnya ada di antara proxy dan aplikasi. Panduan 502 Bad Gateway kami membahas kasus itu.
| Kode | Nama | Artinya | Penyebab Umum |
|---|---|---|---|
| 500 | Internal Server Error | Server atau aplikasi menemui error tak terduga, seperti exception yang tidak tertangani atau konfigurasi yang salah | PHP fatal error, .htaccess rusak, kehabisan memori |
| 502 | Bad Gateway | Proxy menerima respons tidak valid dari backend | PHP-FPM crash, backend tidak berjalan, socket tertutup |
| 503 | Service Unavailable | Server sementara kelebihan beban atau sedang maintenance | Lonjakan traffic, maintenance terjadwal, batas resource |
| 504 | Gateway Timeout | Proxy kehabisan waktu menunggu backend merespons | Query database lambat, skrip berjalan lama, upstream tidak merespons |
Dampak Error 500 terhadap SEO
Dokumentasi Google sendiri menjelaskan apa yang terjadi (dokumentasi crawler Google):
- Crawling melambat. Saat ada error 5xx, Google menurunkan laju crawling situs, sebanding dengan jumlah URL yang mengembalikan error.
- Halaman yang sudah terindeks awalnya tetap ada. URL yang sudah terindeks dipertahankan sementara, tetapi URL yang terus-menerus mengembalikan error server akan dihapus.
- Pemulihan berlangsung bertahap. Setelah server kembali menjawab dengan 2xx, Google meningkatkan crawling secara bertahap.
- Gunakan 503 untuk downtime terencana selama sehari dua hari, dengan header Retry-After (Google), agar downtime dibaca sebagai sementara (panduan 503).
Cara Mencegah Error 500
Mencegah selalu lebih baik daripada debugging. Ikuti praktik terbaik berikut untuk meminimalkan risiko error 500 di website Anda.
- Pasang uptime monitoring — Gunakan tools seperti UptimeRobot atau Pingdom untuk memeriksa situs Anda setiap 1-5 menit. Dapatkan notifikasi instan ketika error 500 terjadi.
- Selalu uji perubahan di staging — Jangan pernah deploy langsung ke production. Uji update plugin, upgrade PHP, dan perubahan konfigurasi di lingkungan staging terlebih dahulu.
- Gunakan version control (Git) — Commit setiap perubahan sehingga Anda bisa langsung mengembalikan deploy yang bermasalah dengan satu perintah.
- Implementasikan error handling yang tepat — Bungkus query database dan panggilan API dalam blok try-catch. Catat stack trace lengkap di sisi server untuk setiap error.
- Pantau ruang disk dan resource server — Atur alert untuk penggunaan disk di atas 80%, CPU tinggi, dan tekanan memori.
- Perbarui software secara rutin — Versi CMS, plugin, dan software server yang usang mengandung bug yang sudah diketahui dan bisa menyebabkan crash.
- Lakukan backup otomatis — Uji prosedur restore secara rutin. Backup yang belum pernah diuji bukanlah backup.
- Atur batas PHP dengan tepat — Konfigurasi memory_limit dan max_execution_time berdasarkan beban kerja aktual Anda, bukan nilai default.
- Gunakan CI/CD pipeline — Otomatiskan pengujian sebelum deployment. Jika test gagal, deploy tidak boleh dilanjutkan.
Lihat kode status yang dikembalikan sebuah halaman
Cek HTTP Header gratis dari DNS Robot meminta URL apa pun dari server kami dan menampilkan kode status serta response header yang persis, sehingga Anda bisa memastikan error 500 dan melihat server mana yang mengirimnya.
Sumber
Pertanyaan yang Sering Diajukan
Apa arti HTTP error 500?
Bagaimana RFC 9110 mendefinisikan 500 Internal Server Error?
Bagaimana cara memperbaiki 500 internal server error?
Apakah error 500 kesalahan saya sebagai pengunjung?
Apa arti 500 Internal Server Error nginx?
Apa perbedaan antara error 500 dan 503?
Bisakah error 500 mempengaruhi peringkat Google saya?
Apa penyebab error 500 di WordPress?
Apa arti "Request failed with status code 500"?
Mengapa saya mendapat error 500 hanya di beberapa halaman?
Artikel Terkait
Alat Terkait
Cek HTTP Header
Analisis header respons HTTP dan penilaian header keamanan
Cek Website Down
Down untuk semua orang atau hanya Anda? Cek website apa pun dari 11 lokasi dan dari koneksi Anda sendiri, dengan screenshot langsung
Cek Redirect
Periksa pengalihan URL, rantai pengalihan, dan kode status HTTP untuk SEO
Cek DNS
Semua DNS record langsung dari nameserver domain, berdampingan dengan cache Google dan Cloudflare



