ERR_CONNECTION_REFUSED: nedenleri ve nasıl çözülür
· 6 dk okuma
Hata ne anlama gelir
Tarayıcı sunucunun adresini buldu, 443 (veya 80) portuna bir bağlantı isteği gönderdi ve sunucu "hayır" yanıtını verdi: o portu dinleyen bir program olmadığında işletim sisteminin gönderdiği bir TCP sıfırlaması. Chrome bunu ERR_CONNECTION_REFUSED ("Bu siteye ulaşılamıyor") olarak, Firefox "Bağlanılamıyor" olarak, Safari "Safari sunucuya bağlanamıyor" olarak gösterir.
Bu bir zaman aşımından (hiçbir şey yanıt vermez, genellikle paketleri düşüren bir güvenlik duvarı veya kapalı bir sunucu) ve DNS_PROBE_FINISHED_NXDOMAIN hatasından (ad çözümlenmiyor) farklıdır. Reddedilen bir bağlantı şu anlama gelir: makine ayakta ve erişilebilir, ama üzerindeki web sunucusu çalışmıyor, başka bir portu veya adresi dinliyor ya da paketleri düşürmek yerine reddeden bir güvenlik duvarı tarafından engelleniyor.
Yaygın nedenler
- Web sunucusu durmuş. nginx veya Apache çöktü, bir yapılandırma değişikliğinden sonra başlayamadı veya bir güncelleme tarafından durduruldu. Açık ara en yaygın neden.
- Web sunucusu yanlış adresi veya portu dinliyor.
listenyönergelerinde yapılan bir değişiklikten sonra nginx, DNS kaydı bir IPv6 adresini gösterirken yalnızca127.0.0.1'e veya yalnızca IPv4'e bağlanır. - Bir güvenlik duvarı portu reddediyor.
ufw,firewalldveya 80/443 içinrejectkuralı olan bir bulut güvenlik grubu; çoğu zaman biri sunucuyu "sertleştirdikten" sonra. - Web sunucusu olmayan yeni bir sunucu. DNS kaydı zaten yeni IP'yi gösteriyor, ama nginx kurulu değil veya henüz başlatılmadı.
- HTTPS kurulmamış. 80 portu çalışıyor, 443 portunun dinleyicisi yok ve tarayıcı (veya bir HSTS kaydı) HTTPS'te ısrar ediyor.
- Ziyaretçi tarafında yerel nedenler. Ölü bir proxy'yi gösteren bir proxy ayarı, bir VPN, antivirüs "web kalkanı", bir hosts dosyası girdisi veya bir tarayıcı eklentisi.
Ziyaretçiyseniz
- Siteyi gizli bir pencerede ve başka bir tarayıcıyla deneyin; bu eklentileri ve önbelleği devre dışı bırakır.
- Proxy ayarlarını kontrol edin: Windows "Proxy ayarları", macOS Ağ > Gelişmiş > Proxy'ler. Kullanmadığınız elle yapılandırılmış bir proxy'yi kapatın.
- VPN'i ve antivirüs web korumasını bir süre kapatın.
- Önbelleğiniz taşınmış bir sitenin eski adresini tutuyorsa DNS'i temizleyin (
ipconfig /flushdns,sudo dscacheutil -flushcache). - Bir kez
https://yerinehttp://deneyin; çalışıyorsa sitenin HTTPS'i bozuktur ve sahibinin düzeltmesi gerekir.
Kendi siteniz ise: önce kontrol edin
Web sitesi çökme kontrolünü çalıştırın. Dışarıdan "Connection refused", sunucunun kendisinin reddettiğini doğrular. Sonra SSH ile giriş yapın (web sitesi reddederken SSH'ın çalışması başlı başına güçlü bir ipucudur: sunucu ayakta, web sunucusu değil).
# web sunucusu çalışıyor mu?
systemctl status nginx
systemctl status apache2
# 80 ve 443'ü ne dinliyor?
sudo ss -tlnp | grep -E ':80 |:443 '
# güvenlik duvarı kuralları
sudo ufw status verbose
sudo firewall-cmd --list-all
sudo nft list ruleset | grep -E 'dport (80|443)'
ss 443'te hiçbir şey göstermiyorsa web sunucusu kapalıdır veya bunun için yapılandırılmamıştır. 0.0.0.0:443 veya *:443 yerine 127.0.0.1:443 gösteriyorsa yalnızca yerel olarak dinliyordur.
Kendi sunucunuzda çözümler
1. Web sunucusunu başlatın ve neden durduğunu okuyun
sudo systemctl start nginx
systemctl status nginx
sudo journalctl -u nginx -n 50
Başlayamıyorsa nedenler neredeyse her zaman şunlardan biridir:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use): portu başka bir program tutuyor (hem Apache hem nginx kurulu veya eski bir işlem).sudo ss -tlnp | grep :80adını söyler; istemediğinizi durdurun.[emerg] unknown directiveveyaunexpected "}": bir yapılandırma dosyasında söz dizimi hatası.sudo nginx -tdosyayı ve satırı yazdırır.cannot load certificate: bir sertifika dosyası silinmiş veya farklı bir yola yenilenmiş.ssl_certificatesatırlarını diskteki dosyalarla karşılaştırın.Too many open filesveya dolu bir disk:df -h,df -i.
Apache: sudo apachectl configtest, sonra sudo journalctl -u apache2 -n 50. Aynı kategoriler geçerlidir; AH00558 (sunucu adı belirlenemedi) yalnızca bir uyarıdır, neden değildir.
Yeniden yüklemeden önce her zaman test edin ve mümkün olduğunda yeniden başlatmak yerine yeniden yükleyin:
sudo nginx -t && sudo systemctl reload nginx
sudo apachectl configtest && sudo systemctl reload apache2
2. Doğru adresi dinleyin
nginx server bloğunda IPv4 ve IPv6 için şunların ikisi de gereklidir:
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
DNS'te bir AAAA kaydı varsa ama sunucu IPv6'yı dinlemiyorsa (veya IPv6 bağlantısı yoksa), diğer herkes iyiyken IPv6'daki ziyaretçiler reddedilen bir bağlantı alır. Ya dinlemesini sağlayın ya da AAAA kaydını kaldırın.
3. Güvenlik duvarını açın
# ufw (Debian/Ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# firewalld (RHEL ailesi)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Bir bulut sunucusunda ayrıca kontrol panelinde sağlayıcının güvenlik grubunu veya ağ güvenlik duvarını kontrol edin; oradaki bir kural sunucunun içinden görünmez.
4. Yalnızca 80 portu yanıt veriyorsa HTTPS'i kurun
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot, 443 server bloğunu ve yönlendirmeyi ekler. Sonra zincirin eksiksiz olduğunu SSL kontrolü ile doğrulayın.
5. Bir sunucu taşımasından sonra
DNS'i değiştirmeden önce yeni makinede web sunucusunun kurulu, alan adı için yapılandırılmış ve başlatılmış olduğundan emin olun. Zaten değiştirdiyseniz: şimdi kurun ve başlatın ya da yenisi hazır olana kadar kaydı eski sunucuya geri yönlendirin.
Sorun hosting firmanızdaysa
Paylaşımlı hostingde reddedilen bir bağlantı, hosting firmasının web sunucusunun düğümünüz için kapalı olduğu veya sizi DNS'i güncellemeden yeni bir IP'ye taşıdıkları anlamına gelir. Şunu gönderin:
Merhaba, example.com web sitem yaklaşık 20:15 UTC'den beri 80 ve 443 portlarında "connection refused" döndürüyor. Alan adı 203.0.113.10 adresine çözümleniyor. Hesabımda hiçbir şeyi değiştirmedim. O makinedeki web sunucusu kapalı mı, yoksa sitem başka bir adrese mi taşındı?
Bir sonrakini önlemek
Reddedilen bir bağlantı neredeyse her zaman durmuş bir web sunucusudur ve durmuş bir hizmet, dışarıdan yapılan bir port kontrolünün ve bir web sitesi kontrolünün bir dakika içinde fark ettiği şeydir. Kendi sunucunuzda sunucu ajanı, nginx veya Apache durduğunda sizi uyarır ve bir Quick Fix onu yapılandırma testi geçtikten sonra sabit fiyatla, gece 3'te kimse oturum açmadan yeniden başlatır. Yapılandırmanın kendisi bozuksa bir Deep Fix onarır.
Ş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
- 503 Service Unavailable: aşırı yük mü, bakım mı?
- 504 Gateway Timeout: ne anlama gelir ve nasıl çözülür
- DNS_PROBE_FINISHED_NXDOMAIN: nedenleri ve çözümleri
- "Bağlantınız gizli değil": SSL sertifikası uyarısı