Buyukweb
HTTP 500 Hatası: Web Hosting'de Sunucu Hataları

HTTP 500 Hatası: Web Hosting'de Sunucu Hataları

Web sitenizde 500 Internal Server Error mı görüyorsunuz? Bu yaygın sunucu hatasının nedenlerini ve çözümlerini adım adım açıklıyoruz.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü12 dakika okuma

HTTP 500 Hatası: cPanel'de Teşhis ve Çözüm

Web siteniz aniden "500 Internal Server Error" sayfası göstermeye başladığında ne yapacaksınız? Sunucu size hiçbir ipucu vermez; tarayıcıda beyaz bir sayfa ya da jenerik bir hata mesajı görürsünüz. Ama bu hata aslında oldukça sistematik biçimde teşhis edilebilir. Bu rehberde cPanel ortamındaki bir hosting hesabında HTTP 500 hatasının nereden geldiğini, hangi sırayla kontrol edeceğinizi ve her yaygın sebebi nasıl çözeceğinizi adım adım açıklıyoruz.

HTTP 500 Ne Anlama Gelir?

HTTP 500 Internal Server Error, sunucunun gelen isteği işlerken beklenmedik bir hatayla karşılaştığını bildiren bir durum kodudur. 4xx hataları (404, 403) istemcinin yaptığı bir şeyden kaynaklanırken, 5xx hataları tamamen sunucu tarafındadır — yani sorun sizin sitenizde ya da sunucu yapılandırmasında.

En önemli özelliği şudur: 500 hatası kasıtlı olarak soyut bırakılmıştır. PHP uygulamanız çöktü, bir script syntax hatası fırlattı, ya da bir izin sorunu oluştu; tarayıcıya gönderilen mesaj hep aynı "Internal Server Error"dır. Bu bir güvenlik tercihidir — sunucu konfigürasyon detayları dışarıya sızdırılmaz. Gerçek hata mesajı sunucu log'unda bekliyor olur.

Bu nedenle 500 hatasını çözmek, önce log'u bulmakla başlar.

500, 502, 503, 504 Farkı

5xx ailesinin her kodu farklı bir şeyi anlatır; bunları birbirine karıştırmak yanlış yerde aramaya yol açar:

Kod İsim Ne demek?
500 Internal Server Error Sunucunun kendi içinde bir hata oluştu (PHP fatal, .htaccess syntax, izin)
502 Bad Gateway Proxy/load balancer upstream sunucudan geçersiz yanıt aldı
503 Service Unavailable Sunucu geçici olarak kullanılamıyor (bakım, kaynak doluluk)
504 Gateway Timeout Upstream sunucu zamanında yanıt vermedi

Paylaşımlı cPanel hosting'de karşılaştığınız şey neredeyse her zaman 500'dür. 502/504, reverse proxy veya CDN katmanında bir şeyler ters gittiğinde görünür — bu durumda Cloudflare (varsa) paneli ve origin log'ları birlikte incelenir.

Yaygın HTTP 500 Sebepleri

Sistematik ilerlemek için sebepleri en sık görülenden başlayarak sıralıyoruz:

  • .htaccess syntax hatası — directives yanlış, mod etkin değil
  • PHP fatal error — memory limit aşımı, syntax hatası, eksik uzantı
  • Dosya/dizin izni hatası — 777/400/000 gibi yanlış ayar, file_put_contents permission denied
  • ModSecurity rule tetiklenmesi — WAF isteği blokluyor
  • PHP handler uyumsuzluğu — mod_php yerine LSAPI ya da PHP-FPM bekleniyor
  • Eksik PHP modülü — mbstring, curl, gd gibi uzantı yüklü değil
  • WordPress plugin veya tema çakışması
  • Laravel/Symfony yapılandırma eksikliği — .env, APP_KEY, storage izinleri
  • Veritabanı bağlantı hatası — MySQL çökmüş, max_connections dolmuş, wp-config yanlış

cPanel'de Hata Teşhisi: Log Nerede?

cPanel, hata loglarına erişmek için birden fazla yol sunar:

Yol 1 — cPanel → Metrics → Errors

cPanel ana sayfasında Metrics bölümündeki Errors menüsüne girin. Sunucunun error_log dosyasından çektiği son 300 satırı listeler. PHP fatal hataları, .htaccess sorunları, permission denied mesajları burada çıkar. En hızlı ve pratik ilk adım budur.

Yol 2 — File Manager → public_html → error_log

cPanel → Files → File Manager içinden public_html/error_log dosyasını açın. PHP, hatayı bu dosyaya yazıyorsa son birkaç satır size doğrudan hata mesajını verir. Dosya yoksa ya da boşsa PHP log_errors direktifi etkin değil demektir — bunu .htaccess ile açabilirsiniz (bir sonraki bölümde).

Yol 3 — /home/user/error_log (Per-Domain)

Bazı cPanel kurulumlarında domain başına hata logu /home/kullanici_adi/logs/site.com-ssl_log ya da /home/kullanici_adi/error_log olarak tutulur. File Manager'dan üst dizine çıkıp bu dosyaları inceleyin.

Pratik ipucu: Hata logunda gördüğünüz satırın sonunda dosya adı ve satır numarası yazar — örneğin in /home/user/public_html/wp-includes/functions.php on line 3247. Bu size tam neyin patladığını söyler.

.htaccess Hatası

.htaccess dosyasındaki bir syntax sorunu anında 500 hatasına neden olur. Apache, .htaccess dosyasını her istek öncesi okur; bir directive yanlışsa sunucu isteği reddeder.

Sık görülen .htaccess sorunları:

  • Kapatılmamış <IfModule> veya <Directory> bloğu
  • Etkin olmayan bir modüle ait directive (örn. mod_rewrite kapalıyken RewriteEngine On)
  • Typo: AllowOveride yerine doğrusu AllowOverride
  • WordPress permalink yapısı değiştirildi ama .htaccess güncellenmedi

Test yöntemi — .htaccess.bak:

# cPanel File Manager'da dosyayı .htaccess.bak olarak yeniden adlandırın
mv .htaccess .htaccess.bak

Sayfayı yenileyin; hata gitti ise sorun kesinlikle .htaccess'tedir. Satır satır inceleyerek yanlış directive'i bulun. WordPress için .htaccess'i sıfırlamak isterseniz cPanel → WordPress → "Flush Permalinks" veya wp-admin → Ayarlar → Kalıcı Bağlantılar → Kaydet işlemi .htaccess'i otomatik yeniden yazar.

PHP Error Log ve Hata Raporlama

PHP hatası var mı, hangi satırda? Bunu görmek için .htaccess'e şu satırları ekleyin:

php_flag display_errors Off
php_flag log_errors On
php_value error_log /home/kullanici_adi/public_html/php_errors.log

display_errors Off üretim ortamı için zorunludur — hatayı ekrana dökmek güvenlik açığı yaratır. Log aktif edilince php_errors.log dosyasına yazılmaya başlar; File Manager'dan takip edin.

Geçici debug için (sadece local/staging):

php_flag display_errors On
php_value error_reporting 32767

Bu ayarla tarayıcıda tam hata mesajını görürsünüz. Sorunu çözdükten sonra mutlaka display_errors Off yapın.

PHP Memory Limit

WordPress, büyük görsel işleme, WooCommerce ya da yoğun eklenti yükü altında PHP belleği tükenebilir. Hata logunda şuna benzer bir satır görürsünüz:

Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 4096 bytes)

.htaccess ile memory limit artırma:

php_value memory_limit 512M

WordPress, genelde 256M ile yeterince çalışır; ağır WooCommerce kurulumlarında 512M öneririz. Hosting paketiniz bu limiti destekliyorsa bu direktif yeterli olur.

cPanel MultiPHP INI Editor ile:

cPanel → Software → MultiPHP INI Editor → memory_limit satırını bulun, değeri artırın, kaydedin. Bu yöntem tüm domain'e uygulanır ve .htaccess override'ına gerek kalmaz. PHP yapılandırması hakkında daha kapsamlı bilgi için cPanel PHP Yönetimi rehberimize bakabilirsiniz.

Dosya İzinleri

Linux tabanlı hosting ortamında her dosya ve dizinin izin seviyesi vardır. Yanlış izin, PHP'nin dosyayı okumasını veya yazmasını engeller ve 500 hatasına yol açar.

Doğru izin değerleri:

Kaynak Doğru İzin
PHP/HTML dosyalar 644
Dizinler 755
wp-config.php 600 veya 640
Upload/cache dizini 755 (bazen 775)
Hiçbir zaman 777 (herkese yazma — güvenlik açığı)

Tek komutla tüm izinleri düzeltme (cPanel Terminal veya SSH):

find /home/kullanici_adi/public_html -type f -exec chmod 644 {} +
find /home/kullanici_adi/public_html -type d -exec chmod 755 {} +
chmod 600 /home/kullanici_adi/public_html/wp-config.php

cPanel → File Manager'dan da seçim yapıp "Permissions" diyerek tek tek değiştirebilirsiniz; ama SSH/Terminal çok daha hızlıdır.

ModSecurity Rule Tetiklenmesi

ModSecurity (kısaca ModSec), cPanel hosting ortamlarında standart gelen bir Web Application Firewall'dür. Zararlı istek kalıplarını — SQL injection, XSS, komut enjeksiyonu — tanıdığında isteği bloklar ve 500 (veya 403) döndürür. Sorun şu: bazen meşru istekler de bir kural tarafından yanlış eşleştirilir.

ModSecurity log nerede?

cPanel → Security → ModSecurity → "Hits" veya "Modsec Audit Log"
/usr/local/apache/logs/modsec_audit.log (SSH erişimi varsa)

Log'da engellenen isteği bulun; kural ID'si görünür, örneğin id "210492".

Kural whitelisting — sadece spesifik kural ID'sini devre dışı bırakın:

# .htaccess veya cPanel ModSec özel kural panelinden
SecRuleRemoveById 210492

Tüm ModSecurity'yi devre dışı bırakmak risklidir — bu seçenek yalnızca test amaçlı kullanılır ve siteniz korumadan kalır. Buyukweb hosting altyapısında ImunifyAV/Imunify360 ile entegre ModSecurity kullanılmaktadır; whitelist ihtiyacında teknik destek ekibimiz doğru kural ID'sini tespit edip sadece o kuralı istisna listesine alır.

Eksik PHP Modülü

PHP uzantıları (extensions) yüklü değilse, o uzantıya bağımlı kod çalışmaya çalışınca fatal error fırlar. Yaygın eksik uzantılar:

Uzantı Neye gerekli?
mbstring WordPress, çok dilli string işleme
curl API istekleri, REST, webhook
gd / imagick Görsel yeniden boyutlandırma
zip Arşiv işlemleri
intl Symfony, Laravel l18n
xml / xmlrpc XML parsing, WordPress xmlrpc

cPanel'de PHP uzantısı etkinleştirme:

cPanel → Software → Select PHP Version → Extensions sekmesi → İstediğiniz uzantının yanındaki kutucuğu işaretleyin → Save.

Uzantı eklendikten sonra sayfayı yenileyin; fatal error duruyorsa bu sebepti.

WordPress'e Özgü 500 Hataları

WordPress, 500 hatasına en sık yol açan platformların başında gelir. Sebeplerin önemli bir kısmı WordPress'e özgüdür.

Plugin Çakışması

Tüm eklentileri tek seferde devre dışı bırakmak için cPanel File Manager'da şunu yapın:

# wp-content/plugins klasörünü geçici olarak yeniden adlandırın
# cPanel File Manager'da klasörü seçin → Rename
plugins → plugins.bak

Siteniz açıldıysa bir plugin sorunlu. Klasörü geri adlandırın (plugins.bakplugins), ardından tek tek her plugin klasörünü rename ederek hangi plugin'in 500'e yol açtığını daraltın.

Tema Çakışması

Aktif temayı SSH ya da phpMyAdmin ile WordPress default temasına değiştirin:

UPDATE wp_options
SET option_value = 'twentytwentyfive'
WHERE option_name = 'template' OR option_name = 'stylesheet';

Tema değiştirilince hata durduysa problem temadadır — tema geliştiricinizle iletişime geçin.

wp-config.php Veritabanı Bilgileri

wp-config.php içindeki DB_HOST, DB_NAME, DB_USER, DB_PASSWORD satırları yanlışsa 500 alırsınız — error log'da "Error establishing a database connection" yazar.

WP_DEBUG Aktivasyonu

wp-config.php içine şunları ekleyin (geçici):

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Bu ayarla hatalar wp-content/debug.log dosyasına yazılır; tarayıcıda görünmez.

max_execution_time Aşımı

Uzun süren import/export veya ağır background task max_execution_time limitini aşarsa 500 gelir. .htaccess ile artırın:

php_value max_execution_time 300

Laravel ve Symfony'de 500 Hataları

PHP framework projelerinde 500 hatasının özgün nedenleri vardır:

storage/ ve bootstrap/cache/ Dizin İzinleri

Laravel, bu iki dizine yazabilmelidir. İzin sorunu varsa anında 500 döner:

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

Eksik .env veya APP_KEY

.env dosyası yoksa ya da APP_KEY tanımlanmamışsa Laravel şifreli session ve cookie işlemlerini yapamaz:

cp .env.example .env
php artisan key:generate

Composer Bağımlılıkları

vendor/ klasörü eksikse ya da eski ise composer install komutuyla bağımlılıkları yükleyin. SSH erişimi gerektiren bu işlem VDS ortamında rahatlıkla yapılabilir.

Hata Günlüğü (Laravel)

Laravel'in kendi log'u storage/logs/laravel.log dosyasında tutulur. 500 hatası sonrası bu dosyayı açın; tam stack trace ile hatanın kaynağını bulursunuz.

Veritabanı Bağlantı Hatası

PHP uygulamanız MySQL/MariaDB'ye bağlanamadığında 500 döner. Error log'da tipik mesaj:

Error establishing a database connection
SQLSTATE[HY000] [2002] No such file or directory
Can't connect to local MySQL server through socket

Kontrol listesi:

  1. Kimlik bilgileri doğru mu? — cPanel → MySQL Databases bölümünden kullanıcı/veritabanı adlarını ve şifreyi doğrulayın
  2. MySQL servisi çalışıyor mu? — VDS'de: systemctl status mariadb; cPanel paylaşımlı hosting'de Buyukweb altyapısı servisi yönetir
  3. max_connections doldu mu? — Yüksek trafik altında bağlantı havuzu dolu olabilir; error log'da "Too many connections" görünür
  4. wp-config.php'deki DB_HOST doğru mu? — Paylaşımlı hosting'de genellikle localhost veya 127.0.0.1

CDN ve Reverse Proxy ile 500

Cloudflare veya başka bir CDN kullanıyorsanız, tarayıcıda gördüğünüz hata aslında CDN'nin origin'den aldığı hata olabilir. Cloudflare'in özel hata kodları:

Cloudflare Kodu Anlamı
520 Origin beklenmedik yanıt döndürdü
521 Origin bağlantıyı reddetti
522 Origin bağlantısı zaman aşımına uğradı
523 Origin'e erişilemiyor

Cloudflare 520 görüyorsanız kaynak sunucuda 500 olabilir; Cloudflare'i geçici olarak devre dışı bırakıp (Development Mode) doğrudan origin IP'ye istek atarak doğrulayın.

LiteSpeed kullanan bir hosting ortamında reverse proxy timeout değeri düşükse uzun PHP işlemleri 500 ya da 504 ile sonuçlanabilir. Bu durumda PHP max_execution_time ve LiteSpeed timeout değerlerini birlikte artırmak gerekir.

Buyukweb Destek

Buyukweb hosting altyapısında cPanel, ModSecurity ve ImunifyAV entegrasyonu standart olarak gelir. HTTP 500 hatasını kendi başınıza çözemediğinizde:

  • 7/24 Telefon: 0850 302 60 70
  • Destek Talebi: my.buyukweb.com üzerinden ticket açın

Destek ekibine şunları iletirseniz teşhis çok daha hızlı ilerler:

  1. cPanel Errors menüsündeki son 10 satır log
  2. Hangi URL'de 500 aldığınız
  3. Hangi PHP sürümü seçilmiş (cPanel → Select PHP Version)
  4. Son ne zaman sorun yoktu, ne değişti?

cPanel error_log, ModSecurity audit log ve PHP sürüm uyumu üzerinden pratik debug akışını birlikte yürütürüz.

Sık Sorulan Sorular

Her 500 hatası .htaccess'ten mi gelir?

Hayır. .htaccess en sık tetikleyici sebeplerden biridir, ama PHP fatal error, ModSecurity, dosya izni ve veritabanı sorunları da eşit sıklıkla görülür. Log okumadan "herhalde .htaccess" diye doğrudan silmek, asıl sorunu gizleyebilir.

Eklentinin sorunlu olup olmadığını nasıl test ederim?

cPanel File Manager'dan wp-content/plugins klasörünü plugins.bak olarak yeniden adlandırın. Site açılıyorsa bir eklenti sorunlu. Klasörü geri alın ve tek tek eklenti klasörlerini devre dışı bırakarak hangisi sorunlu bulun.

Memory limit'i nereden değiştiririm?

İki yol: (1) .htaccess'e php_value memory_limit 512M yazın, (2) cPanel → MultiPHP INI Editor → memory_limit değerini değiştirin. WordPress'te genellikle 256M, WooCommerce'de 512M yeterli olur.

ModSecurity kuralı nasıl whitelist'e alınım?

cPanel → Security → ModSecurity bölümünden Hits/Audit log'u açın. Engellenen isteğin kural ID'sini bulun (örn. id "210492"). Ardından .htaccess'e SecRuleRemoveById 210492 ekleyin ya da Buyukweb destek ekibinden sadece o kuralı istisna listesine almasını isteyin. Tüm ModSec'i kapatmak güvenlik açığı yaratır.

Cloudflare 520 ile origin 500 aynı şey mi?

Hayır. Cloudflare 520, CDN'nin origin'den beklenmedik yanıt alması durumunda gösterir — kaynak 500 dönüyorsa 520 görürsünüz, ama kaynak başka bir hata kodu da dönüyor olabilir. Cloudflare panelinde Ray ID üzerinden logu incelediğinizde origin yanıt kodunu görebilirsiniz.

Site hiç açılmıyor, nereden başlayım?

Şu sırayı izleyin: (1) cPanel Errors menüsüne girin — en son log satırını okuyun. (2) .htaccess.bak yeniden adlandırma testiyle .htaccess'i eleyın. (3) plugins.bak testiyle WordPress eklentilerini eleyın. (4) PHP memory_limit'i 512M'e çıkarın. (5) Hâlâ çözülmediyse 0850 302 60 70'i arayın, log satırını paylaşın.

PHP sürümü 500 hatasına neden olabilir mi?

Evet. Eski bir PHP sürümünde yazılmış bir uygulama, yeni PHP sürümüne geçildiğinde deprecated fonksiyonlar veya kaldırılmış uzantılar yüzünden 500 verebilir. Tersi de geçerlidir: PHP 7.x'te çalışan bazı eklentiler PHP 8.x'in sıkılaştırılmış type checking'i karşısında fatal error fırlatır. cPanel → Select PHP Version üzerinden PHP sürümünü bir adım geriye alıp sorunu doğrulayabilirsiniz. Uyumlu sürümü bulduktan sonra eklentilerinizi güncelleyerek hedef PHP versiyonuna geçin.


İlgili Büyükweb Hizmetleri

HTTP 500 sorunlarını minimize eden altyapı için:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Web Hosting Rehberi İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#HTTP 500 hatası#sunucu hatası#Internal Server Error#.htaccess#WordPress hata#PHP hata#hosting sorunları

Bu yazıyı paylaş