Otomatik HTTPS ile Caddy Web Sunucusu Nasıl Kurulur
Ubuntu’da Caddy’yi resmi depodan kurun, statik siteler ve ters proxy’ler için bir Caddyfile yazın, otomatik sertifikaları, systemd’yi, günlükleri ve Nginx’ten geçişte yaygın hataları anlayın.

Caddy, varsayılan olarak TLS sertifikaları alan ve yenileyen bir web sunucusudur. Bir veya iki alan adı barındıran küçük bir VPS için bu, bütün bir Certbot zamanlayıcıları ve Nginx parça dosyaları sınıfını kaldırır. Yapılandırma dili (Caddyfile) kısadır. Ters proxy, gzip ve HTTP/2 normal özelliklerdir, ekstra modüllerle geçirilen bir hafta sonu değil.
Nginx bazı ekipler için hâlâ doğru seçimdir: zaten savaşta sınanmış yapılandırmalarınız vardır veya çok spesifik bir modüle ihtiyacınız vardır. Bu rehber diğer yaygın durum içindir — taze bir Hiddence VPS’te include parçalarını ezberlemeden çalışan HTTPS istiyorsunuz. Caddy’yi resmi apt deposundan kuracağız, Let's Encrypt ile nasıl konuştuğunu açıklayacağız, statik bir site sunacağız, yerel bir uygulamayı proxy’leyeceğiz, birkaç alan adı barındıracağız, günlüklere bakacağız ve Apache veya eski bir Nginx ile olağan 80 portu kavgalarını ele alacağız.
Caddy ne zaman iyi bir uyumdur
Otomatik HTTPS manşettir, ama günlük kazanç daha az hareketli parçadır. Caddy 80 ve 443’ü dinler, HTTP’yi HTTPS’e yönlendirir ve sertifikaları veri dizininde saklar. Yine de VPS’e işaret eden bir alan adına ihtiyacınız vardır. Yine de ACME’yi bozmamanız gerekir (güvenlik duvarı 80/tcp, :80’i çalan başka süreç yok). Joker sertifikalar bir DNS sağlayıcı modülü ister — bu, tek ana bilgisayar sertifikasından daha uzun bir yoldur.
- Otomatik HTTP→HTTPS ve sertifika yenileme
- Uzun sunucu blokları yerine okunabilir Caddyfile
- Node, Python, ekstra yapılandırmayla PHP-FPM veya Docker arka uçları için yetkin ters proxy
- Şifre elektronik tablosu olmadan HTTP/2 ve modern TLS varsayılanları
- Resmi paketten systemd birimi
Gereksinimler
Caddy ACME HTTP-01’i kanıtlamadan önce bir alan adı bu VPS’e çözülmelidir. DNS hâlâ yayılıyorsa Caddy düzenleme başarısız olur ve yeniden dener; bu ‘Caddy bozuk’ gibi görünür oysa yalnızca DNS’tir. 80/443’e sahiplerse önce Apache veya Nginx’i durdurun.
- Ubuntu 22.04 veya 24.04
- VPS IP’sine bir alan adı A kaydı (IPv6 kullanıyorsanız AAAA da)
- 80 ve 443 portları boş ve güvenlik duvarında izinli
- Root veya sudo
Adım 1: Caddy’yi resmi depodan kurun
Güncel TLS ve ACME davranışı istiyorsanız varsayılan Ubuntu universe’ten rastgele eski bir Caddy kurmayın. Caddy projesi bir apt kaynağı belgeler. Kurulumdan sonra caddy kullanıcısı vardır ve hizmet etkindir.
ssh root@YOUR_VPS_IP
apt update && apt -y install debian-keyring debian-archive-keyring apt-transport-https curl gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt -y install caddy
caddy version
systemctl status caddy --no-pagerAdım 2: İlk Caddyfile — statik site
Varsayılan Caddyfile /etc/caddy/Caddyfile’dır. Alan adınızla değiştirin. Ana bilgisayar adı localhost değilse yapılandırma yüklenir yüklenmez Caddy bir sertifika almaya çalışır. Site dosyalarını caddy kullanıcısının okuyabileceği bir dizine koyun (çoğunlukla www-data tarzı izinler, ancak paket caddy kullanıcısını kullanır).
mkdir -p /var/www/example
echo '<h1>It works</h1>' > /var/www/example/index.html
chown -R caddy:caddy /var/www/example
cat >/etc/caddy/Caddyfile <<'EOF'
example.com {
root * /var/www/example
file_server
encode gzip
}
EOF
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
# Watch issuance:
journalctl -u caddy -fAdım 3: Yerel bir uygulamayı ters proxy’leyin
Gunicorn, Node veya Docker 127.0.0.1:8000’de dinliyorsa Caddy tek genel süreç olmalıdır. reverse_proxy yönergesi çoğu uygulama için Host ve X-Forwarded-* başlıklarını makul şekilde iletir. Uygulama mutlak HTTP URL’leri üretiyorsa uygulamada güvenilen proxy / HTTPS bayraklarını ayarlayın (Django SECURE_PROXY_SSL_HEADER, Express trust proxy vb.).
app.example.com {
encode gzip
reverse_proxy 127.0.0.1:8000
}
# Several hosts in one file are normal:
# blog.example.com {
# root * /var/www/blog
# file_server
# }Adım 4: Güvenlik duvarı ve systemd
80 ve 443’e izin verin. Caddy’nin birimi caddy.service’dir; süreç sağlıklıysa Caddyfile düzenlemelerinden sonra reload yeterlidir. Bir DNS eklentisi için ortam değişkenlerini değiştirirseniz tam yeniden başlatma daha nettir. Sertifikalar varsayılan olarak /var/lib/caddy/.local/share/caddy/ altındadır — yeniden kurulumda hız limitlerini önemsiyorsanız bu yolu yedeklere ekleyin.
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
systemctl enable --now caddy
systemctl reload caddy
# Backup cert storage (path may vary slightly by version):
ls -la /var/lib/caddy/Adım 5: Günlükler, sıkıştırma ve başlıklar
Erişim günlükleri bir bot bir yolu dövdüğünde veya 404’leri ayıklarken yardımcı olur. Site başına günlük tutabilirsiniz. Bir tarayıcı uygulaması barındırıyorsanız güvenlik başlıkları ekleyin; HSTS’i anlamadan dev bir başlık paketini kopyalamayın (uzun bir max-age koyduğunuzda tarayıcılar hatırlar).
example.com {
root * /var/www/example
file_server
encode gzip
log {
output file /var/log/caddy/example.log
}
header {
X-Content-Type-Options nosniff
Referrer-Policy no-referrer-when-downgrade
-Server
}
}
mkdir -p /var/log/caddy
chown caddy:caddy /var/log/caddy
systemctl reload caddyAdım 6: PHP ve diğer ekstralar
Caddy, php_fastcgi yönergesiyle PHP-FPM ile konuşabilir. Bu birçok WordPress veya Laravel barındırması için yeterlidir, ancak hâlâ php-fpm’in kurulu olması ve eşleşen bir soket yolu gerekir. Zaten mükemmel bir Nginx PHP yapılandırmanız varsa bir akşamda geçiş isteğe bağlıdır — Caddy ters proxy + statik + otomatik TLS’te daha parlar.
example.com {
root * /var/www/example
php_fastcgi unix//run/php/php8.3-fpm.sock
file_server
}
# Confirm FPM is running:
systemctl status php8.3-fpmKesinti sürprizleri olmadan Nginx’ten geçiş
Caddy’yi başlatmadan önce Nginx’i durdurun yoksa 80/443 için savaşırlar. IP de taşıyorsanız bir gün önce DNS TTL’yi düşürün. A kaydını değiştirmeden önce yeni VPS’e vurabilmek için curl --resolve ile test edin. Geri almanız gerekirse Nginx yapılandırmalarını bir hafta git’te tutun.
- systemctl stop nginx && systemctl disable nginx
- Caddy’yi kurun, Caddyfile’ı doğrulayın, Caddy’yi başlatın
- curl -I --resolve example.com:443:NEW_IP https://example.com
- IP yeniyse ancak o zaman DNS’i değiştirin
- Yeniden düzenleme otomatiktir; aynı ana bilgisayar adına karşı Certbot da çalıştırmayın
Sorun giderme
ACME hataları neredeyse her zaman DNS, güvenlik duvarı veya 80 portundaki başka bir hizmettir. Caddy günlük satırları tls.obtain’den bahseder. Site HTTP’de çalışıyor HTTPS’te çalışmıyorsa düzenleme hiç tamamlanmamıştır. Çok fazla sertifika görürseniz Let's Encrypt hız limitlerine çarptınız — test ederken üretim değil hazırlık CA’sını kullanın.
- validate başarısız: Caddyfile sözdizimi, eksik süslü ayraç
- root’ta permission denied: site dizini için chown caddy
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- sertifika zaman aşımı: VPS’ten dig +short alan adı, ufw allow 80
- 502 reverse_proxy: arka uç kapalı veya bir konteyner ağından localhost’a yanlış proxy
Güvenlik notları
Caddy’nin TLS varsayılanları ihtiyatlıdır. Sizin işiniz uygulama güvenliği ve SSH’dir. Caddy yönetici API’sini genel bir arayüzde açmayın. Varsayılan yönetici uç noktası yereldır; öyle bırakın. İnternetten bir Caddyfile kullanıyorsanız her eşleştiriciyi okuyun — /* öğesini iç bir IP’ye reverse_proxy yapan bir parça açık proxy olabilir.
- Yönetici API’sini açmayın
- Paketi güncel tutun
- HSTS’i yalnızca tüm ana bilgisayar adları için HTTPS’in çalıştığından emin olduktan sonra
- ACME hız limitlerini korumak için test ve üretim ana bilgisayar adlarını ayırın
İpuçları
- caddy fmt --overwrite /etc/caddy/Caddyfile dosyayı okunaklı tutar
- Birçok benzer siteniz olduğunda import parçalarını kullanın
- Docker için, bağlı bir Caddyfile ile caddy:alpine imajı yaygındır
- Joker sertifikalar bir DNS modülü ve API belirteci ister — o belirteci koruyun
- Tüm dosyayı yeniden yazmadan önce journalctl -u caddy okuyun
VPS’te Caddy şudur: resmi paket, kısa bir Caddyfile, açık 80/443 portları, zaten sunucuyu gösteren DNS ve düzenlemelerden sonra systemd reload. Statik dosya sunucusu veya Gunicorn, Node ya da Docker önünde ters proxy olarak kullanın. Otomatik HTTPS, ACME 80 portunda yanıt verebildiğinde çalışır; düzenleme başarısız olursa Caddy’yi suçlamadan önce DNS ve port çakışmalarını düzeltin. Sık yeniden kuruyorsanız /var/lib/caddy yedekleyin.