Apache service failed hatası, Apache HTTP Server’ın başlatılamadığını, yeniden başlatılamadığını veya systemd tarafından başarısız duruma alındığını gösterir. Hata; Debian/Ubuntu sistemlerinde çoğunlukla apache2, RHEL, AlmaLinux, Rocky Linux ve CentOS türevlerinde ise httpd servisi altında görülür. Tek başına bu mesaj kök nedeni açıklamaz: hatalı sanal host yapılandırması, kullanımda olan 80/443 portu, geçersiz SSL sertifika yolu, yetersiz disk alanı ya da izin/SELinux politikası gibi farklı nedenler aynı sonucu üretir. Bu rehberde önce gerçek hata satırını bulacak, ardından değişiklikleri güvenli biçimde uygulayıp Apache hizmetini doğrulayacaksınız.
Apache service failed hatasında kapsam ve hızlı teşhis özeti
Önce dağıtımınızdaki servis adını belirleyin. Aşağıdaki komutlardan uygun olanı çalıştırın. Çıktıda failed, son hata kodu ve servis başlatma denemeleri görüntülenir.
# Debian / Ubuntu
sudo systemctl status apache2 --no-pager -l
# RHEL / AlmaLinux / Rocky Linux / CentOS
sudo systemctl status httpd --no-pager -l
Hızlı teşhis sırası şöyledir:
- Servis durumundaki ilk anlamlı
AH...,Syntax error,Address already in useveya benzeri hata satırını bulun. - systemd günlüğünden aynı başlatma denemesinin ayrıntılarını alın.
- Apache yapılandırmasını değiştirmeden önce söz dizimi testi yapın.
- 80 ve 443 portlarını hangi sürecin dinlediğini kontrol edin.
- Disk alanı, inode, bellek baskısı ve gerekiyorsa SELinux denetim kayıtlarını inceleyin.
- Kök nedeni düzelttikten sonra servisi başlatın ve HTTP/HTTPS yanıtını yerelden doğrulayın.
Önemli: Canlı bir sunucuda yapılandırma, sertifika, modül veya port değişikliği yapmadan önce ilgili dosyaların yedeğini alın ve mümkünse bakım penceresi planlayın. Uzak bağlantıyla yönetilen sistemlerde ikinci bir SSH oturumunu açık tutmak, yanlış bir ağ veya güvenlik duvarı değişikliğinde erişimi korur.
Apache service failed hatasının yaygın nedenleri
| Belirti veya log ifadesi | Muhtemel neden | İlk güvenli kontrol |
|---|---|---|
Syntax error veya AH00526 |
Hatalı direktif, eksik kapanış, yanlış Include dosyası | Yapılandırma testi |
Address already in use |
80/443 portunu başka süreç kullanıyor | ss -ltnp ile port sahibi |
| Sertifika veya anahtar dosyası okunamıyor | Yanlış dosya yolu, izin, uyumsuz sertifika/anahtar | SSL VirtualHost ve dosya erişimleri |
No space left on device |
Disk ya da inode dolu | df -h ve df -i |
Permission denied |
Dosya izinleri, sahiplik veya SELinux engeli | Journal ve SELinux AVC kayıtları |
OOM, Killed process |
Çekirdek bellek yetersizliği nedeniyle süreci sonlandırdı | Kernel günlüğü ve bellek durumu |
Logları ve yapılandırmayı doğru sırayla inceleyin
Systemd ve Apache günlüklerini alın
systemctl status özeti çoğu zaman yeterli değildir. Son başlatma denemesindeki ayrıntıları journal üzerinden okuyun. Servis adını işletim sisteminize göre değiştirin.
# Debian / Ubuntu
sudo journalctl -u apache2 -b --no-pager -n 150
# RHEL ailesi
sudo journalctl -u httpd -b --no-pager -n 150
# Son 30 dakikadaki Apache ilişkili kayıtları görmek için
sudo journalctl -u apache2 --since "30 minutes ago" --no-pager
# RHEL ailesinde apache2 yerine httpd kullanın
Özellikle AH ile başlayan Apache hata kodunu, hatalı dosya yolunu ve satır numarasını not edin. Bir yapılandırma dosyası değiştirildiyse, yalnızca belirtilen dosyayı geri almak veya düzeltmek genellikle tüm Apache kurulumunu yeniden yapılandırmaktan daha güvenlidir.
Yapılandırma testini çalıştırın
Servisi yeniden başlatmayı tekrar tekrar denemek yerine önce söz dizimini kontrol edin. Debian/Ubuntu üzerinde apache2ctl; RHEL ailesinde genellikle apachectl veya httpd kullanılabilir.
# Debian / Ubuntu
sudo apache2ctl configtest
# RHEL / AlmaLinux / Rocky Linux / CentOS
sudo apachectl configtest
# Alternatif olarak:
sudo httpd -t
Başarılı sonuç tipik olarak Syntax OK içerir. Bu sonuç servis başlatmanın kesin garantisi değildir; port çakışması, sertifika dosyası erişimi veya kaynak sorunu yine de başlangıcı engelleyebilir. Ancak test hata veriyorsa, hata düzelmeden restart uygulamayın.
Etkin yapılandırma ve sanal host eşleşmesini kontrol edin
Birden fazla site, ters vekil veya SSL sanal host kullanılıyorsa çakışan ServerName, yanlış DocumentRoot ya da yinelenen dinleme tanımları sorun çıkarabilir. Aşağıdaki komut, Apache’nin gördüğü sanal host eşleşmelerini listeler.
# Debian / Ubuntu
sudo apache2ctl -S
# RHEL ailesi
sudo apachectl -S
Bu çıktıda uyarı görüyor ancak configtest başarılı oluyorsanız, uyarının doğrudan başlatma hatası olup olmadığını journal kayıtlarıyla doğrulayın. Uyarıları ve ölümcül hataları birbirine karıştırmayın.
Olası nedene göre güvenli adım adım çözüm
1. Hatalı yapılandırma veya modül ayarını düzeltin
Log satırında bir dosya ve satır numarası varsa önce o dosyanın tarihli kopyasını oluşturun. Dağıtımın varsayılan yapı dizinleri farklıdır; dosya yolunu tahmin etmek yerine hata çıktısındaki yolu kullanın.
# Örnek: Logda belirtilen dosyayı, gerçek yoluyla yedekleyin
sudo cp -a /logda/belirtilen/dosya.conf /logda/belirtilen/dosya.conf.bak.$(date +%F-%H%M%S)
# Düzenleme sonrasında yeniden test edin
sudo apache2ctl configtest
# RHEL ailesinde: sudo apachectl configtest
Eksik noktalı virgül gibi başka yazılımlara ait alışkanlıklarla Apache yapılandırmasını değiştirmeyin; Apache direktifleri ve bağlamları sürüme, etkin modüllere ve dağıtıma göre değişebilir. Hata, tanınmayan bir direktif söylüyorsa önce gerekli modülün etkin olup olmadığını ve kullandığınız yapılandırmanın sürümünüzle uyumunu kontrol edin.
2. 80 veya 443 port çakışmasını giderin
Nginx, Caddy, başka bir Apache örneği, konteyner yayınlama kuralı veya yanlışlıkla çalışan test süreci 80/443 portunu tutabilir. Port sahibini tespit etmeden süreç sonlandırmayın.
sudo ss -ltnp '( sport = :80 or sport = :443 )'
# Alternatif olarak, lsof kuruluysa
sudo lsof -nP -iTCP:80 -sTCP:LISTEN
sudo lsof -nP -iTCP:443 -sTCP:LISTEN
Çıktıdaki süreç beklenen bir web sunucusu değilse, o hizmetin neden çalıştığını değerlendirin. Ters vekil mimarisinde Nginx’in 80/443 dinlemesi normal olabilir; bu durumda Apache’nin doğrudan aynı portlara bağlanması tasarım hatasıdır. Apache Listen veya VirtualHost portlarını, mimarinize uygun ve belgelenmiş iç porta göre düzenleyin. Çalışan bir üretim hizmetini yalnızca portu boşaltmak için durdurmak kesintiye yol açabilir.
3. SSL sertifikası ve özel anahtar hatalarını kontrol edin
Sertifika yenilemesinden sonra görülen Apache service failed hatası çoğu zaman silinmiş dosya yolu, okunamayan özel anahtar veya eşleşmeyen sertifika/anahtardan kaynaklanır. Journal kaydındaki SSLCertificateFile ya da SSLCertificateKeyFile yolunu doğrulayın.
# Sertifikanın okunabildiğini ve tarihlerini kontrol edin
sudo openssl x509 -in /sertifika/dosyasi.pem -noout -subject -issuer -dates
# Özel anahtarın okunabildiğini kontrol edin
sudo openssl pkey -in /anahtar/dosyasi.key -noout -check
# Ardından yapılandırma testi
sudo apachectl configtest
Özel anahtar içeriğini ekrana, ticket sistemine veya sohbet kanalına kopyalamayın. Dosya izinlerini gelişigüzel 777 yapmak güvenli değildir; Apache’nin çalıştığı hizmet hesabı ve işletim sistemi güvenlik politikasıyla uyumlu, en az ayrıcalıklı erişimi kullanın.
4. Disk, inode ve bellek baskısını giderin
Disk doluluğu geçici dosya, günlük veya PID dosyası oluşturulmasını engelleyebilir. İnode doluluğunda ise boş alan görünse bile yeni dosya yaratılamaz.
df -h
df -i
free -h
sudo journalctl -k -b --no-pager | grep -Ei 'out of memory|oom|killed process'
Alan açmanız gerekiyorsa önce büyük veya olağandışı büyüyen dosyaları belirleyin, ardından saklama politikanıza uygun eski günlükleri güvenle yönetin. Aktif log dosyalarını rastgele silmek yerine log rotasyonu yapılandırmasını inceleyin. OOM kaydı varsa yalnızca Apache’yi yeniden başlatmak kalıcı çözüm değildir; eşzamanlı iş yükü, Apache MPM ayarları, PHP uygulama süreçleri ve sunucu belleği birlikte değerlendirilmelidir.
5. SELinux kaynaklı erişim engellerini inceleyin
SELinux etkin RHEL türevlerinde doğru görünen izinler dahi politikayla engellenebilir. SELinux’u kalıcı veya geçici olarak kapatmak yerine önce reddedilen işlemi kanıtla tespit edin.
getenforce
sudo ausearch -m AVC,USER_AVC -ts recent -i
sudo journalctl -t setroubleshoot --since "1 hour ago" --no-pager
Örneğin web kökünü standart dışı bir konuma taşıdıysanız uygun dosya bağlamı gerekebilir. Uygulanacak bağlam, dizin yolu ve kullanım amacına göre değiştiği için AVC kaydını incelemeden rastgele SELinux kuralı veya geniş izin tanımlamayın.
Servisi başlatma ve çözümü doğrulama
Yapılandırma testi başarılı ve kök neden giderilmişse servisi başlatın. Mevcut çalışan Apache’yi gereksiz kesintiye uğratmamak için, yapılandırma değişikliği sonrası mümkün olduğunda önce reload tercih edilir; servis zaten başarısızsa start kullanın.
# Debian / Ubuntu
sudo systemctl start apache2
sudo systemctl status apache2 --no-pager -l
# RHEL ailesi
sudo systemctl start httpd
sudo systemctl status httpd --no-pager -l
Systemd çok sayıda başarısız denemeden sonra başlatmayı engellediyse, sorun çözüldükten sonra sayaç temizlenebilir:
# Debian / Ubuntu
sudo systemctl reset-failed apache2
sudo systemctl start apache2
# RHEL ailesi
sudo systemctl reset-failed httpd
sudo systemctl start httpd
Son olarak yerel HTTP yanıtını ve etkin dinleme portlarını kontrol edin. Yerel test başarılıyken dış erişim yoksa güvenlik duvarı, yük dengeleyici, DNS veya ağ erişim listeleri ayrıca incelenmelidir.
curl -I http://127.0.0.1/
ss -ltnp '( sport = :80 or sport = :443 )'
# HTTPS yapılandırılmışsa, sertifika doğrulamasıyla yerel test
curl -I https://localhost/
Apache service failed hatasını önleme
- Her yapılandırma değişikliğinden önce ilgili dosyayı sürüm kontrolüne alın veya tarihli yedek oluşturun.
- Dağıtıma veya panel yapısına ait otomatik üretilen Apache dosyalarını doğrudan düzenlemeden önce üretim yöntemini doğrulayın.
- Sertifika yenileme sonrasında
configtestve kontrollü servis yeniden yükleme adımını işletim prosedürüne ekleyin. - Disk, inode, bellek ve servis başarısızlıkları için izleme/uyarı eşikleri tanımlayın.
- Port planını belgelendirin; ters vekil, uygulama sunucusu ve Apache’nin hangi adres/portlarda dinlediğini netleştirin.
Sonuç
Apache service failed hatası için doğru yaklaşım, hizmeti körlemesine tekrar başlatmak değil; önce journal kaydındaki gerçek hatayı yakalamak, yapılandırmayı test etmek ve port, SSL, kaynak veya güvenlik politikası sorununu kanıtla gidermektir. Bu sıra hem kesinti süresini kısaltır hem de çalışan siteleri etkileyebilecek gereksiz değişiklikleri önler.
Sık sorulan sorular
Apache neden “failed” olur ama configtest başarılı çıkar?
Yapılandırma testi yalnızca Apache yapılandırmasının okunabildiğini gösterir. Port çakışması, disk doluluğu, sertifika dosyasına çalışma anında erişememe veya bellek yetersizliği servis başlangıcını yine engelleyebilir.
Apache için restart mı reload mu kullanmalıyım?
Geçerli yapılandırmayla çalışan bir hizmette değişiklik sonrası reload daha az kesintilidir. Servis durmuş veya başarısız durumdaysa kök nedeni çözdükten sonra start kullanın.
80 portunu kullanan süreci kill etmek güvenli midir?
Hayır. Sürecin Nginx, yük dengeleyici aracısı veya başka bir üretim bileşeni olup olmadığını önce belirleyin. Süreci sonlandırmak kullanıcı kesintisine ya da otomatik yeniden başlatma döngüsüne neden olabilir.
SELinux’u kapatmak sorunu çözer mi?
Geçici olarak belirtinin kaybolmasına yol açabilir, ancak güvenlik katmanını devre dışı bırakır ve kök nedeni çözmez. AVC kayıtlarından engellenen erişimi tespit edip dar kapsamlı ve doğru politikayı uygulayın.