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

Panduan memperbaiki HTTP error 500 internal server error dengan tampilan crash server dan langkah-langkah debugging
Panduan memperbaiki HTTP error 500 internal server error dengan tampilan crash server dan langkah-langkah debugging
Mulai membaca
  1. Apa Itu HTTP Error 500?
  2. Tampilan Error 500
  3. 500 Internal Server Error di nginx
  4. Penyebab Umum HTTP Error 500
  5. Cara Memperbaiki Error 500 (Sebagai Pengunjung)
  6. Solusi 1: Periksa Error Log Server
  7. Solusi 2: Periksa dan Perbaiki .htaccess
  8. Solusi 3: Perbaiki File Permission
  9. Solusi 4: Tingkatkan Batas Memori dan Eksekusi PHP
  10. Solusi 5: Nonaktifkan Plugin dan Tema (CMS)
  11. Solusi 6: Periksa Koneksi Database dan Perbaiki
  12. Solusi 7: Periksa Kompatibilitas Versi PHP
  13. Solusi 8: Periksa Ruang Disk
  14. 500 vs 502 vs 503 vs 504: Apa Perbedaannya?
  15. Dampak Error 500 terhadap SEO
  16. Cara Mencegah Error 500
  17. 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 nginxArtinya
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
bash
# 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) atau max_execution_time (30 detik) dihentikan.
  • Baris php_value di 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.

bash
# 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.log

Solusi 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.

bash
# Rename to disable .htaccess
mv .htaccess .htaccess_backup

# If site loads, regenerate a clean .htaccess
# For WordPress, go to Settings > Permalinks and click Save

Solusi 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.

bash
# 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.php

Solusi 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.

bash
# 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.

bash
# 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 --force

Solusi 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.

bash
# 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:

bash
# 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 -m

Solusi 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.

bash
# 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=200M

500 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.

KodeNamaArtinyaPenyebab Umum
500Internal Server ErrorServer atau aplikasi menemui error tak terduga, seperti exception yang tidak tertangani atau konfigurasi yang salahPHP fatal error, .htaccess rusak, kehabisan memori
502Bad GatewayProxy menerima respons tidak valid dari backendPHP-FPM crash, backend tidak berjalan, socket tertutup
503Service UnavailableServer sementara kelebihan beban atau sedang maintenanceLonjakan traffic, maintenance terjadwal, batas resource
504Gateway TimeoutProxy kehabisan waktu menunggu backend meresponsQuery 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

  1. RFC 9110 §15.6.1: 500 Internal Server Error, IETF
  2. HTTP status codes and Google's crawlers, Google
  3. ngx_http_core_module.c (rewrite or internal redirection cycle), nginx
  4. Pause or disable a website, Google
  5. ngx_http_auth_basic_module.c (403 vs 500), nginx

Pertanyaan yang Sering Diajukan

Apa arti HTTP error 500?

Server menemui masalah tak terduga saat memproses permintaan Anda dan tidak bisa menyelesaikannya. Ini error umum "serba bisa": ada yang rusak di sisi server, dan 500 tidak menyebutkan apa. Detailnya ada di error log situs.

Bagaimana RFC 9110 mendefinisikan 500 Internal Server Error?

Bagian 15.6.1 berbunyi: "The 500 (Internal Server Error) status code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request." Artinya: server menemui kondisi tak terduga yang membuatnya tidak dapat memenuhi permintaan. RFC 9110 (Juni 2022) adalah standar semantik HTTP yang berlaku saat ini.

Bagaimana cara memperbaiki 500 internal server error?

Baca dulu error log server (Apache, nginx, PHP-FPM, atau aplikasi Anda). Lalu periksa tersangka yang biasa: file .htaccess, batas memori dan waktu PHP, plugin atau tema yang baru diperbarui, file permission, koneksi database, dan ruang disk yang tersisa.

Apakah error 500 kesalahan saya sebagai pengunjung?

Hampir tidak pernah. Ini error di sisi server. Muat ulang sekali setelah semenit, dan jika masih muncul, cek apakah situs down untuk semua orang. Menghapus cookie situs bisa membantu pada kasus langka ketika cookie sesi yang rusak memicunya.

Apa arti 500 Internal Server Error nginx?

Biasanya aplikasi di belakang nginx (PHP, Node.js, Python) mengembalikan 500 dan nginx meneruskannya; pada PHP-FPM, alasannya ada di error log nginx sendiri sebagai "FastCGI sent in stderr". nginx membuat 500 sendiri, misalnya untuk loop rewrite, file auth_basic yang tidak terbaca, atau penulisan file sementara yang gagal (sering karena disk penuh).

Apa perbedaan antara error 500 dan 503?

500 berarti ada yang rusak secara tak terduga. 503 berarti server sengaja tidak tersedia untuk sementara, karena kelebihan beban atau maintenance, dan bisa memberi tahu kapan harus mencoba lagi lewat header Retry-After. Untuk maintenance terencana, kirim 503.

Bisakah error 500 mempengaruhi peringkat Google saya?

Yang singkat tidak terlalu berpengaruh. Google memperlambat crawling saat melihat error 5xx dan mempertahankan halaman terindeks untuk sementara, tetapi URL yang terus mengembalikan error server akhirnya dihapus dari indeks. Perbaiki 500 yang berlangsung lama dengan cepat.

Apa penyebab error 500 di WordPress?

Biasanya plugin atau tema yang membuat PHP crash, file .htaccess yang rusak, batas memori PHP, pembaruan gagal yang meninggalkan file inti tidak lengkap, atau koneksi database. WordPress sering menampilkan "Ada eror serius pada situs web Anda." dan mengirim email ke admin.

Apa arti "Request failed with status code 500"?

Itu pesan error dari Axios, library HTTP JavaScript: API yang dipanggil kode Anda menjawab 500. Masalahnya ada di server itu. Baca error.response.data untuk pesan dari API-nya sendiri, dan periksa log API jika itu milik Anda.

Mengapa saya mendapat error 500 hanya di beberapa halaman?

Jika hanya sebagian halaman yang gagal, penyebabnya ada di kode atau data di belakangnya: baris database yang rusak, file include yang hilang, atau plugin yang hanya berjalan di template tertentu. Error log menyebutkan file dan barisnya.

Tentang penulis

Shaik Vahid

Pendiri DNS Robot. Vahid bertahun-tahun bekerja di dukungan web hosting, memperbaiki domain, record DNS, sertifikat SSL, dan pengiriman email untuk pelanggan. Ia membangun alat-alat DNS Robot dan menulis panduan ini dari error yang benar-benar dialami orang.

Cek HTTP Header

Analisis header respons HTTP dan penilaian header keamanan