503 Service Unavailable: aşırı yük mü, bakım mı?
· 7 dk okuma
Hata ne anlama gelir
503, web sunucusunun "Buradayım ama şu anda size hizmet veremiyorum" demesidir. Bir 502 hatasından farklı olarak, arkasındaki hiçbir şeyin bozuk olması gerekmez. Sunucu bilerek üç durumda 503 gönderir: bakım modundadır, uyması söylenen bir sınıra (bağlantılar, işçiler, bant genişliği, bir hız sınırı) ulaşmıştır veya ayakta kalmak için istekleri düşürecek kadar aşırı yüklüdür. Bir 503, istemcilere ne zaman geri gelecekleri söyleyen bir Retry-After başlığı taşıyabilir; arama motorları kısa bir 503'ü geçici sayar ve sayfayı bırakmaz.
Yaygın nedenler
- Açık kalmış bakım modu. WordPress güncellemeler sırasında bir
.maintenancedosyası yazar ve güncelleme bitene kadar 503 ile yanıt verir. Güncelleme yarıda kesilirse dosya ve hata kalır. Laravel, Magento, Drupal ve çoğu çatının eşdeğer bir anahtarı vardır. - Aşırı yük. Yapılandırılmış işçilerin kaldırabileceğinden fazla istek. Apache'nin
MaxRequestWorkersdeğerine ulaşıldı, PHP-FPM'inpm.max_childrendeğeri tükendi veya veritabanı her işçinin beklediği kadar yavaş. - Bir hosting sınırı. Paylaşımlı hosting firmaları hesap başına CPU saniyelerini, eşzamanlı işlemleri veya "entry processes" değerini sınırlar. Sınıra ulaştığınızda, hosting firmasının ağ geçidi yalnızca sizin siteniz için 503 ile yanıt verir.
- Rotasyondan çıkarılmış bir arka uç. Bir yük dengeleyici veya CDN'in arkasında, 503 tüm arka uçların sağlık kontrolünde başarısız olduğu anlamına gelir. Cloudflare, kaynak aşırı yüklendiğinde veya hız sınırına takıldığında kendi 503 sayfasını gösterir.
- Botlar ve kazıyıcılar. Binlerce sayfa çeken bir tarayıcı ya da
wp-login.phpveyaxmlrpc.phpüzerindeki bir kaba kuvvet saldırısı işçileri tüketir ve meşru ziyaretçiler 503 alır. - Dolu disk veya tükenmiş bellek. Hizmet ayakta ama oturumları, önbellek dosyalarını veya logları yazamaz ve bazı uygulamalar bu durumda 503 ile yanıt verir.
Ziyaretçiyseniz
Bir dakika bekleyin ve yeniden yükleyin; bir 503 genellikle kısadır. Bir site saatlerce 503'te kalıyorsa sahibinde takılı kalmış bir bakım modu veya bir kapasite sorunu vardır ve yalnızca o düzeltebilir.
Kendi siteniz ise: önce kontrol edin
503'ü dışarıdan doğrulamak ve onu bir CDN'in mi yoksa kendi sunucunuzun mu gönderdiğini görmek için web sitesi çökme kontrolünü çalıştırın. Sonra karar verin: son dakikalarda siz veya CMS'iniz bir güncelleme başlattı mı? Evet ise bakım modudur. Hayır ise kapasitedir.
Kendi sunucunuzda:
# web sunucusu hiç ayakta mı?
systemctl status nginx
systemctl status apache2
# yük, bellek, disk: 503'lerin çoğunun arkasındaki üç sayı
uptime
free -m
df -h
# şu anda siteyi kim eziyor?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
CPU çekirdeği sayısının çok üzerinde bir yük ortalaması, 100 MB'tan az boş bellek veya son dakikalarda binlerce isteği olan tek bir IP, her biri bir 503'ü açıklar.
Kendi sunucunuzda çözümler
1. Takılı kalmış bakım modunu sonlandırın
WordPress: site kök dizinindeki .maintenance dosyasını silin, sonra siteyi açın. Onu oluşturan güncelleme yarıda kesildiyse eklenti veya çekirdek yarım kurulmuş olabilir; güncellemeyi panodan veya WP-CLI ile yeniden çalıştırın:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up. Magento: bin/magento maintenance:disable. Drupal: $settings['maintenance_mode'] değerini false yapın veya drush state:set system.maintenance_mode 0 kullanın.
2. Seli durdurun
Sorunlu IP'yi veya ağı engelleyin, sonra bir sonrakinin bunu yapamaması için bir hız sınırı ekleyin.
# bir adresi engelleyin (ufw'lu Debian/Ubuntu)
sudo ufw deny from 203.0.113.45
# veya nftables ile
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
Giriş sayfaları için nginx hız sınırı (http bloğunda, sonra server bloğunda):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Apache: mod_evasive veya mod_qos aynı işi yapar; apache-badbots ve wordpress jail'leri olan fail2ban, tekrar eden saldırganları otomatik olarak engeller.
3. Sunucuya kapasite verin
Yük kötüye kullanım değil gerçek trafikse, işçi sınırlarını belleğin izin verdiği ölçüde yükseltin. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Önce işçi başına belleği kontrol edin: ps -ylC php-fpm8.3 --sort:rss. Sonra test edin ve yeniden yükleyin:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Bir artışın artık her istek için PHP çalıştırmaması için sayfa önbelleklemesini açın (WordPress: bir önbellek eklentisi veya nginx'te FastCGI önbelleği). Önbellekteki bir sayfa milisaniyenin çok küçük bir kesrine mal olur; önbelleksiz bir WordPress sayfası yüzlercesine.
4. Diski boşaltın
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Eski log dosyaları, aynı diskte tutulan yedekler ve kontrolden çıkmış bir hata ayıklama logu olağan şüphelilerdir.
5. Bir yük dengeleyicinin arkasında
Tüm arka uçların aynı anda sağlık kontrolünde başarısız olması, genellikle her bir arka uçtan çok kontrol URL'sinin kendisinin bozuk olduğu anlamına gelir (silinmiş sağlık sayfası, denetleyicinin izlemediği HTTPS yönlendirmesi). Sağlık URL'sini yük dengeleyiciden elle çekin.
Sorun hosting firmanızdaysa
Paylaşımlı hostingde sınırları yükseltemezsiniz. Hosting firmanıza hangi sınıra ulaştığınızı ve bunun sizin trafiğiniz mi yoksa aynı sunucudaki başka bir hesap mı olduğunu sorun:
Merhaba, example.com web sitem yaklaşık 09:10 UTC'den beri "503 Service Unavailable" ile yanıt veriyor. Bir güncelleme başlatmadım ve site bakım modunda değil. Lütfen hesabımın bir kaynak sınırına (CPU, işlemler, bellek) ulaşıp ulaşmadığını ya da sunucunun aşırı yüklü olup olmadığını ve sayıların ne olduğunu söyleyebilir misiniz? Hesabımsa, hangi sınır ve ne zamandan beri?
Yanıt düzenli olarak "hesabınız sınırlarına ulaştı" ise, siteyi ya düzgünce önbelleğe alın ya da daha fazla kapasiteli bir plana veya sunucuya geçin.
Bir sonrakini önlemek
Bir 503 kendini önceden duyurur: yük sinsice artar, bellek tükenir, bir IP sel yapmaya başlar. Web sitesi kontrolleri 503'ü bir dakika içinde yakalar; sunucu ajanı yükü, belleği ve diski işler o noktaya gelmeden gösterir. Kendi sunucunuzda bir Quick Fix disk alanını açar ve takılmış bir hizmeti sabit fiyatla yeniden başlatır; bir Deep Fix de sunucunun bir dahaki sefere ayakta kalması için hız sınırlarını ve önbelleklemeyi kurar.
Şimdi ne yapmalı
Dışarıdan kontrol edin
Site herkes için mi çöktü yoksa yalnızca sizin için mi, ve sunucu ne yanıt veriyor? Ücretsiz, kayıt gerekmez.
Web sitesi çökme kontrolüÇöktü mü? Devreye gireriz.
Kendi sunucunuzda veya SSH erişimi olan bir hosting alanında: yaygın nedenler için sabit fiyatlı bir Quick Fix, gerisi için 15 dakikalık bloklar hâlinde faturalanan bir Deep Fix, günün her saatinde. Fiyatı sipariş vermeden önce görürsünüz.
Onarımı yaptırınDiğer rehberler
- Web siteniz çöktü. İlk 15 dakikada yapmanız gerekenler.
- Sunucu çöktü: önce neye bakmalı ve hangi sırayla
- 502 Bad Gateway: nedenleri ve nasıl çözülür
- 504 Gateway Timeout: ne anlama gelir ve nasıl çözülür
- DNS_PROBE_FINISHED_NXDOMAIN: nedenleri ve çözümleri
- ERR_CONNECTION_REFUSED: nedenleri ve nasıl çözülür
- "Bağlantınız gizli değil": SSL sertifikası uyarısı