Caddy 2.9 Reverse Proxy Kurulumu: Otomatik HTTPS ile Modern Web Sunucusu (2026)

26.04.2026 13:30 Haber

Web sunucusu denilince akla genelde Nginx veya Apache gelir. Ama son yıllarda Caddy sessiz sedasız bir devrim yapıyor: tek satır yapılandırmayla otomatik HTTPS, sıfır cron job ile sertifika yenileme ve okunabilir bir konfigürasyon dili (readable config). Caddy 2.9 ile birlikte gelişmiş load balancing, daha hızlı reverse proxy ve geliştirilmiş HTTP/3 desteği geldi. Alesta Web ekibi olarak bu rehberde sıfırdan Caddy kurulumu, reverse proxy yapılandırması ve otomatik HTTPS aktivasyonunu adım adım anlatıyoruz.

Caddy Nedir? (What is Caddy?)

Caddy, Go diliyle yazılmış modern bir web sunucusudur. Üç ayırt edici özelliği var:

? Caddy'nin Üstünlükleri (Caddy's Strengths):
  • Otomatik HTTPS: Let's Encrypt sertifikası otomatik alır ve yeniler
  • Tek dosya binary: Bağımlılık yok, indir-çalıştır
  • Caddyfile: İnsan tarafından okunabilir yapılandırma
  • HTTP/2 ve HTTP/3: Yerleşik destek
  • Reverse Proxy: Tek satırla yapılandırılır

Alesta Web ekibi olarak özellikle yeni başlayanlara veya hızlı prototipleme yapan ekiplere Caddy'yi öneriyoruz. Üretim ortamlarımızdan bazılarında Nginx yerine Caddy kullanıyoruz ve sertifika yenileme stresinden kurtulmak başlı başına büyük bir kazanım (huge win).

Adım Adım Caddy Kurulumu (Installation)

Ubuntu / Debian Üzerinde Kurulum

# Caddy resmi APT deposunu ekle
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Paket listesini güncelle ve Caddy'yi kur
sudo apt update
sudo apt install -y caddy

# Versiyon kontrolü
caddy version

# Servis durumu
sudo systemctl status caddy

Diğer Sistemler İçin Kurulum

# macOS (Homebrew)
brew install caddy

# CentOS / RHEL
sudo dnf install -y 'dnf-command(copr)'
sudo dnf copr enable -y @caddy/caddy
sudo dnf install -y caddy

# Docker ile (en taşınabilir)
docker run -d --name caddy \
  -p 80:80 -p 443:443 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  caddy:2.9
✅ Beklenen Çıktı:

v2.9.x sürüm bilgisi gördüyseniz kurulum tamamlanmıştır. Servis varsayılan olarak http://localhost:2019 üzerinde admin API sunar.

Caddyfile: Basit Yapılandırma Dosyası

Caddy'nin yapılandırma dosyasına Caddyfile denir. Nginx'in karmaşık syntaxine kıyasla şaşırtıcı derecede basit ve okunabilir (refreshingly simple). Bir örnekle başlayalım:

En Basit Caddyfile (Hello World)

# /etc/caddy/Caddyfile

example.com {
    respond "Merhaba Alesta Web!"
}

Bu kadar! Caddy bu dosyayı okuduğunda example.com için otomatik olarak HTTPS sertifikası alır, HTTP'den HTTPS'e yönlendirir ve cevap olarak metin döndürür. Hiçbir ek yapılandırma gerekmez (no additional configuration needed).

Statik Dosya Sunma

site.example.com {
    root * /var/www/site
    file_server
}

Yapılandırmayı Yeniden Yükleme

# Caddyfile değiştirildikten sonra
sudo systemctl reload caddy

# Veya manuel olarak
sudo caddy reload --config /etc/caddy/Caddyfile

# Yapılandırmayı kontrol et (validate)
caddy validate --config /etc/caddy/Caddyfile

Reverse Proxy Kurulumu (Reverse Proxy Setup)

Reverse proxy, Caddy'nin en güçlü kullanım senaryolarından biri. Diyelim ki localhost:3000'de bir Node.js uygulamanız var ve onu app.example.com üzerinden HTTPS ile yayınlamak istiyorsunuz. Alesta Web olarak gerçek müşteri projelerinde aşağıdaki yapılandırmayı sıkça kullanıyoruz:

Tek Backend için Reverse Proxy

app.example.com {
    reverse_proxy localhost:3000
}

Evet, sadece bu kadar. Caddy şunları otomatik yapar:

  • Let's Encrypt'ten ücretsiz HTTPS sertifikası alır
  • HTTP'den HTTPS'e otomatik yönlendirme
  • HTTP/2 ve HTTP/3 etkinleştirir
  • WebSocket'leri proxy'ler
  • Sertifikayı otomatik yeniler (cron yok!)

Path Bazlı Yönlendirme (Path-Based Routing)

api.example.com {
    # /api/* istekleri Node backend'e
    handle /api/* {
        reverse_proxy localhost:3000
    }

    # /admin/* istekleri Python backend'e
    handle /admin/* {
        reverse_proxy localhost:8000
    }

    # Geri kalanı statik dosya
    handle {
        root * /var/www/frontend
        file_server
    }
}

Header Manipülasyonu (Header Manipulation)

api.example.com {
    reverse_proxy localhost:3000 {
        # Backend'e ek header gönder
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}

        # Backend'den gelen response'a header ekle
        header_down Strict-Transport-Security "max-age=31536000;"
    }
}

Otomatik HTTPS (Automatic HTTPS)

Caddy'nin "killer feature"ı budur: domaininizi yazmanız yeterli — Caddy otomatik olarak Let's Encrypt'ten sertifika alır, HTTP-01 veya TLS-ALPN-01 challenge'ı çözer, sertifikayı kurar ve süresi dolmadan otomatik yeniler. Sertbot, cron job, manuel yenileme — hiçbiri gerekmez (none of those are needed).

⚠️ Önkoşullar (Prerequisites):

Otomatik HTTPS'in çalışması için şu koşullar sağlanmalı:

  • Domain DNS'i sunucunuza yönlendirilmiş olmalı (A record)
  • 80 ve 443 portları dış dünyaya açık olmalı (firewall)
  • Sunucunun internete erişimi olmalı (Let's Encrypt API için)

Wildcard Sertifika (DNS Challenge)

*.example.com {
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN}
    }

    @api host api.example.com
    handle @api {
        reverse_proxy localhost:3000
    }

    @app host app.example.com
    handle @app {
        reverse_proxy localhost:4000
    }
}

Bu yapılandırma *.example.com için tek bir wildcard sertifika alır ve subdomain'leri ayrı ayrı yönetir. alestaweb.com gibi subdomain yoğun projelerde çok kullanışlı (very useful for subdomain-heavy sites).

Load Balancing ve Health Check

Birden fazla backend'iniz varsa Caddy yük dengeleme yapabilir. Çeşitli stratejiler mevcuttur: round_robin (varsayılan), least_conn, ip_hash ve random.

Çoklu Backend ile Load Balancing

api.example.com {
    reverse_proxy {
        to localhost:3001
        to localhost:3002
        to localhost:3003

        lb_policy least_conn
        health_uri /health
        health_interval 10s
        health_timeout 5s
    }
}
? Health Check Açıklaması:

Caddy 10 saniyede bir her backend'in /health endpoint'ini kontrol eder. 5 saniye içinde 2xx cevap gelmezse o backend'i pasif yapar. Backend tekrar sağlıklı olduğunda otomatik olarak rotasyona dahil eder (automatic failover and recovery).

HTTP/3 ve QUIC Desteği

HTTP/3 — TCP yerine UDP üzerinde çalışan QUIC protokolünü kullanır — özellikle mobil bağlantılarda ve yüksek gecikmeli ağlarda %20-40 daha hızlı (20-40% faster). Caddy 2.9 ile HTTP/3 varsayılan olarak etkin geliyor.

HTTP/3 Aktivasyonunu Doğrulama

# HTTP/3 desteğini test et (curl 7.66+ gerekir)
curl --http3 -I https://example.com

# Tarayıcı (Chrome) DevTools → Network → Protocol sütunu
# 'h3' veya 'h3-29' gibi değerler görmelisiniz

Nginx ile Karşılaştırma

Alesta Web uzmanlarının her iki sunucuyu da kullanma deneyimine dayanan karşılaştırma:

Caddy vs Nginx

Özellik Nginx Caddy 2.9
Konfig syntax Karmaşık Çok basit
Otomatik HTTPS Manuel (Certbot) Yerleşik
HTTP/3 desteği Deneysel Varsayılan
Performans Çok yüksek Yüksek
Bellek kullanımı Çok düşük Orta
Plugin/modül Recompile gerekir xcaddy ile kolay
Öğrenme eğrisi Dik Yumuşak

Nginx'in performans avantajı çok yüksek trafikli sitelerde (saniyede 50.000+ istek) hâlâ belirgin. Caddy ortalama orta-büyük projeler için fazlasıyla yeterli. Alesta Web ekibi olarak yeni başlayan ve hızlı kurulum isteyen ekiplere Caddy, ileri düzey yapılandırma ihtiyacı olan ekiplere Nginx öneriyoruz.

Sık Karşılaşılan Hatalar ve Çözümleri

❌ "challenge failed" — Sertifika alınamıyor

Genelde DNS veya port engelinden kaynaklanır.

# DNS doğru mu kontrol et
dig example.com +short

# Portlar açık mı?
sudo ufw status
sudo iptables -L

# Port 80 ve 443 açık olmalı
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

❌ "rate limit exceeded" — Let's Encrypt limiti

Test sırasında sürekli sertifika denerseniz limit aşılabilir.

example.com {
    tls {
        # Test ortamında staging server kullanın
        ca https://acme-staging-v02.api.letsencrypt.org/directory
    }
    respond "test"
}

❌ Caddy başlatılamıyor — port 80 kullanımda

Apache veya başka bir web sunucusu zaten 80 portunu dinliyor olabilir.

# 80 portunda ne çalışıyor?
sudo lsof -i :80

# Apache'yi durdur
sudo systemctl stop apache2
sudo systemctl disable apache2

# Caddy'yi başlat
sudo systemctl start caddy

? Kaynaklar / References

Alesta Web olarak tüm yapılandırmaları Ubuntu 24.04 LTS üzerinde Caddy 2.9.x ile test ettik (verified on Ubuntu 24.04 LTS with Caddy 2.9.x).

✅ Sonuç (Conclusion)

Caddy 2.9, modern web sunucusu ihtiyaçları için son derece güçlü bir alternatif. Otomatik HTTPS tek başına tüm sertifika yönetim derdinizi ortadan kaldırır; Caddyfile'ın okunabilirliği ekibinizi mutlu eder; HTTP/3 desteği kullanıcılarınıza daha hızlı sayfa yükleme deneyimi sunar. Yeni projelerde direkt Caddy ile başlamayı düşünebilirsiniz.

Hızlı Özet / Quick Summary:

  • ✅ Tek satırla reverse proxy
  • ✅ Otomatik HTTPS (Let's Encrypt yerleşik)
  • ✅ HTTP/3 (QUIC) varsayılan etkin
  • ✅ Load balancing + health check yerleşik
  • ✅ Caddyfile ile okunabilir yapılandırma

Faydalı Linkler / Useful Links:

© 2026 Alesta Web — Tüm hakları saklıdır. Sunucu kurulumu, reverse proxy yapılandırması, SSL sertifika yönetimi ve modern web altyapısı için profesyonel destek almak isterseniz alestaweb.com üzerinden iletişime geçebilirsiniz.