Bu rehber, Ubuntu 24.04 VPS üzerinde Portainer'ı portainer.ekasunucu.com alan adına bağlarken gerçekten yaşadığımız Cloudflare Error 521 Web Server Is Down hatasını uçtan uca inceliyor. Portainer backend 127.0.0.1:9443 üzerinde çalışırken public origin 443/reverse proxy hazır değildi; Nginx kurulumu, local origin testi ve Let's Encrypt sertifikasıyla HTTPS origin zincirini tamamladık. Ayrıca aynı süreçte yaşanan Certbot core24 timeout hatasını 521'den ayrı bir problem olarak belgeliyoruz.
Visitor
↓
Cloudflare
↓ HTTPS :443
Nginx Origin
↓
https://127.0.0.1:9443
↓
Portainer
Önce: :443 yok → 521
Sonra: Nginx + TLS → HTTPS 200Cloudflare'ın güncel dokümantasyonuna göre 521, origin web server Cloudflare bağlantısını reddettiğinde oluşur. En yaygın iki neden origin web serverın kapalı olması veya Cloudflare isteklerinin origin güvenlik katmanı tarafından engellenmesidir.
SSL/TLS modu Full veya Full (strict) ise Cloudflare origin'e HTTPS üzerinden ulaşır; originin 443 portunda aktif dinlemesi ve TLS sunabilmesi gerekir. Bizim gerçek Portainer akışında backend 9443 üzerinde sağlıklıydı fakat public origin reverse proxy/443 katmanı henüz hazır değildi.
Cloudflare Edge → Origin :443 → connection refused → 521Portainer'ın kendisi çalışmıyorsa önce containerı düzeltmeniz gerekir. Ancak 521 varken Portainer localhost 9443 üzerinden HTTP 200 dönüyorsa backend sağlıklıdır ve problem daha üst katmandadır: Nginx, TLS, firewall veya Cloudflare-origin bağlantısı.
Bu ayrım gereksiz yere backend portunu public açmanızı önler. Biz doğrudan 9443'ü internete açmak yerine localhostta bıraktık ve Nginx reverse proxy kurduk.
docker ps --filter name='^/portainer$'curl -k -I https://127.0.0.1:9443521 troubleshooting başlamadan önce hostname'in doğru origin IP'ye çözüldüğünü doğrulayın. Yanlış A/AAAA kaydı sizi tamamen farklı bir sunucunun port ve firewall problemleriyle uğraştırabilir.
Gerçek akışta Cloudflare DNS ve Google DNS sorgularıyla portainer.ekasunucu.com kaydı kontrol edildi. Troubleshooting sırasında proxy'yi geçici DNS-only yapmak doğrudan origin davranışını görmek için yardımcı olabilir; bu her sertifika kurulumunda zorunlu bir adım değildir.
dig +short A portainer.ekasunucu.com @1.1.1.1dig +short A portainer.ekasunucu.com @8.8.8.8Cloudflare'ın 521 rehberi, SSL/TLS modunuz Full veya Full (strict) ise origin web serverın HTTPS için gerekli portta aktif dinlemesi gerektiğini özellikle belirtir. HTTPS origin akışında bu port 443'tür.
Bizim olayda Portainer kendi HTTPS servisini yalnız localhost 9443 üzerinde sunuyordu. Cloudflare doğrudan bunu bilemez; public 443 üzerinde bir web server/reverse proxy katmanı olmadan origin HTTPS bağlantısı reddedilebilir.
ss -lntp | grep -E ':443|:9443'Portainer uygulama portunu public yapmak yerine Nginx'i origin web server olarak kullandık. portainer.ekasunucu.com isteği Nginx tarafından https://127.0.0.1:9443 upstreamine iletildi.
Portainer localhost upstreaminde self-signed sertifika kullandığı için proxy_ssl_verify off yalnız bu local hop için kullanıldı. Public browser/Cloudflare tarafındaki origin TLS daha sonra Let's Encrypt sertifikasıyla Nginx üzerinde sonlandırıldı.
apt-get update && apt-get install -y nginxproxy_pass https://127.0.0.1:9443;proxy_ssl_verify off;Portainer web arayüzü için normal proxy headerlarının yanında WebSocket upgrade desteğini korumak gerekir. Nginx'te HTTP/1.1, Upgrade ve Connection headerlarını upstream'e ilettik.
Bu adım 521'in temel bağlantı reddini çözmekten ayrıdır; 521 sonrası arayüz açılıp canlı bağlantılar sorun yaşarsa reverse proxy headerlarını kontrol etmek gerekir.
proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;Cloudflare proxy'yi tekrar devreye almadan önce origin web serverı kendi içinde test etmek troubleshooting süresini kısaltır. nginx -t, service status ve local Host header isteği üç farklı katmanı doğrular.
Gerçek reverse proxy kurulumu sonrasında local Nginx isteği 200 döndü. Böylece Portainer backend ve Nginx proxy zincirinin Cloudflare'dan bağımsız çalıştığını gördük.
nginx -tsystemctl is-active nginxcurl -sS -o /dev/null -w '%{http_code}\n' -H 'Host: portainer.ekasunucu.com' http://127.0.0.1/Let's Encrypt aşamasında gerçek testimizde Certbot snap kurulumu core24 paketini indirirken TCP timeout verdi. Bu, Cloudflare 521'in devamı değildi; VPS'in Canonical snap CDN'e erişiminde oluşan ayrı bir ağ problemiydi.
Ağ erişimi düzeldikten sonra snap/Certbot işlemi tekrarlandığında kurulum devam etti. Troubleshooting sırasında aynı anda birden fazla hata kodunu tek sebebe bağlamamak önemlidir.
snap install certbot --classicsnap changesjournalctl -u snapd --no-pager -n 100Nginx HTTP vhost çalıştıktan sonra Certbot --nginx ile portainer.ekasunucu.com için sertifika alındı. Başarılı deploy sonrasında origin 443 üzerinde geçerli sertifika sunabilir hale geldi.
Origin HTTPS hazır olduktan sonra Full (strict) gibi sertifika doğrulayan Cloudflare modlarını güvenle kullanabilmek için temel gereksinimler tamamlanmış olur: 443 erişimi, süresi geçmemiş sertifika ve hostname eşleşmesi.
certbot --nginx -d portainer.ekasunucu.comcurl -I https://portainer.ekasunucu.comcertbot renew --dry-runCloudflare'ın güncel dokümantasyonu, mümkün olduğunda Full (strict) modunu en güvenli seçenek olarak önerir. Bu mod edge ile origin arasında HTTPS kullanır ve origin sertifikasının geçerliliğini, süresini ve hostname eşleşmesini kontrol eder.
Let's Encrypt gibi public CA sertifikaları bu modelle kullanılabilir. Ancak Full (strict) seçmeden önce origin 443 ve sertifika zincirinin gerçekten çalıştığını test edin; aksi durumda farklı SSL hata kodlarıyla karşılaşabilirsiniz.
Visitor HTTPS → Cloudflare → HTTPS + certificate validation → Nginx origin :443Bizim gerçek vakamızda origin reverse proxy hazır değildi; ancak Cloudflare 521 için bu tek sebep değildir. Cloudflare resmi rehberi güvenlik yazılımlarının veya firewall kurallarının meşru Cloudflare IP adreslerini engellemesini de yaygın nedenler arasında sayar.
Nginx 443 üzerinde sağlıklı çalışıyor ve doğrudan origin testi başarılı olduğu halde 521 devam ediyorsa firewall, fail2ban, CSF/LFD, rate limit veya provider güvenlik katmanlarını inceleyin. Cloudflare IP aralıklarını rastgele tek IP bazında değil resmi güncel listeye göre yönetin.
tail -n 100 /var/log/nginx/error.logjournalctl -u nginx --no-pager -n 100iptables -Snft list ruleset521 temel olarak originin Cloudflare bağlantısını reddetmesidir. 522, Cloudflare'ın origin bağlantısında timeout yaşamasıdır. 525 SSL handshake başarısızlığına, 526 ise Full (strict) sırasında geçersiz origin sertifikasına işaret eder.
Bu ayrım troubleshooting yönünü değiştirir. 521'de önce web server/listener/firewall; 522'de ulaşılabilirlik ve timeout; 525/526'da TLS handshake ve sertifika zinciri incelenmelidir.
521 → connection refused / origin down522 → origin connection timeout525 → SSL handshake failed526 → invalid SSL certificateEn hızlı troubleshooting sırası katmanları tek tek ayırmaktır. Önce DNS, sonra local backend, sonra Nginx config/service, ardından 443 socket ve son olarak gerçek HTTPS/domain testi yapılmalıdır.
Bu sırada backend portunu public açmayın. Amaç 521'i uygulama güvenliğini bozarak değil, doğru origin katmanını tamamlayarak çözmektir.
dig +short A portainer.ekasunucu.comcurl -k -I https://127.0.0.1:9443nginx -t && systemctl is-active nginxss -lntp | grep -E ':443|:9443'curl -I https://portainer.ekasunucu.comtail -n 100 /var/log/nginx/error.logCloudflare origin web servera bağlanırken bağlantının origin tarafından reddedildiğini gösterir.
Origin web serverın kapalı olması veya origin güvenlik katmanının Cloudflare isteklerini engellemesi Cloudflare'ın belirttiği yaygın nedenlerdir.
Portainer yalnız localhost 9443 üzerinde çalışıyor fakat Cloudflare'ın erişeceği origin web server 443 üzerinde hazır değilse backend sağlıklı olsa da 521 görülebilir.
Standart HTTPS origin bağlantısı için origin web server 443 üzerinde aktif olmalıdır.
Hayır. Bu rehberde 9443 localhostta bırakılıp public erişim Nginx reverse proxy üzerinden verildi.
https://127.0.0.1:9443 upstreami kullanıldı.
Portainer localhost upstreamindeki self-signed sertifika için yalnız local proxy hopunda doğrulama kapatıldı; public origin TLS Let's Encrypt ile Nginx'te sonlandırıldı.
Hayır. Troubleshooting veya doğrudan origin testi için geçici olarak yararlı olabilir ama her sertifika kurulumunda zorunlu değildir.
Hayır. Gerçek testte bu Snap CDN'e erişimde ayrı bir TCP timeout problemiydi.
Origin 443 üzerinde geçerli, süresi dolmamış ve hostname ile eşleşen bir sertifika sunduğunda mümkünse Full (strict) tercih edilebilir.
521 originin bağlantıyı reddetmesidir; 522 Cloudflare'ın origin bağlantısında timeout yaşamasıdır.
521 bağlantı seviyesinde origin reddi; 526 ise sertifika doğrulaması sırasında geçersiz origin sertifikasıdır.
Firewall, fail2ban/CSF, rate limit ve Cloudflare IP blokları kontrol edilmelidir.
DNS, localhost backend, Nginx config/service, 443 listener, origin HTTPS ve error log sırasıyla kontrol edin.
Portainer, n8n, Open WebUI ve diğer self-hosted servisleri Nginx + TLS + Cloudflare mimarisiyle çalıştırmak için EKA Sunucu Linux VPS paketlerini inceleyebilirsiniz.
Güncellendi: 10.08.2026