Πώς να εγκαταστήσετε τον διακομιστή ιστού Caddy με αυτόματο HTTPS
Εγκαταστήστε το Caddy σε Ubuntu από το επίσημο αποθετήριο, γράψτε Caddyfile για στατικούς ιστότοπους και αντίστροφους διαμεσολαβητές, κατανοήστε αυτόματα πιστοποιητικά, systemd, αρχεία καταγραφής και συνηθισμένα λάθη κατά τη μετάβαση από Nginx.

Το Caddy είναι διακομιστής ιστού που αποκτά και ανανεώνει πιστοποιητικά TLS από προεπιλογή. Για μικρό VPS που φιλοξενεί έναν ή δύο τομείς, αυτό αφαιρεί μια ολόκληρη κλάση χρονομέτρων Certbot και αρχείων αποσπασμάτων Nginx. Η γλώσσα διαμόρφωσης (Caddyfile) είναι σύντομη. Αντίστροφος διαμεσολαβητής, gzip και HTTP/2 είναι κανονικά χαρακτηριστικά, όχι ένα σαββατοκύριακο επιπλέον μονάδων.
Το Nginx είναι ακόμη η σωστή επιλογή για ορισμένες ομάδες: έχετε ήδη ρυθμίσεις δοκιμασμένες στη μάχη ή χρειάζεστε πολύ συγκεκριμένη μονάδα. Αυτός ο οδηγός είναι για την άλλη συνηθισμένη περίπτωση — θέλετε HTTPS που λειτουργεί σε φρέσκο VPS Hiddence χωρίς να απομνημονεύετε αποσπάσματα include. Θα εγκαταστήσουμε Caddy από το επίσημο αποθετήριο apt, θα εξηγήσουμε πώς μιλάει με Let's Encrypt, θα σερβίρουμε στατικό ιστότοπο, θα διαμεσολαβήσουμε τοπική εφαρμογή, θα φιλοξενήσουμε πολλούς τομείς, θα κοιτάξουμε αρχεία καταγραφής και θα καλύψουμε τις συνηθισμένες μάχες θύρας 80 με Apache ή παλιό Nginx.
Πότε το Caddy ταιριάζει καλά
Το αυτόματο HTTPS είναι ο τίτλος, αλλά το καθημερινό κέρδος είναι λιγότερα κινούμενα μέρη. Το Caddy ακούει στις 80 και 443, ανακατευθύνει HTTP σε HTTPS και αποθηκεύει πιστοποιητικά στον κατάλογο δεδομένων του. Εξακολουθείτε να χρειάζεστε τομέα που δείχνει στο VPS. Εξακολουθείτε να χρειάζεστε να μην σπάσετε το ACME (τείχος προστασίας 80/tcp, καμία άλλη διεργασία να μην κλέβει :80). Τα πιστοποιητικά μπαλαντέρ χρειάζονται μονάδα παρόχου DNS — αυτή είναι μεγαλύτερη διαδρομή από πιστοποιητικό ενός κεντρικού.
- Αυτόματο HTTP→HTTPS και ανανέωση πιστοποιητικού
- Αναγνώσιμο Caddyfile αντί για μακριά μπλοκ διακομιστή
- Ικανός αντίστροφος διαμεσολαβητής για Node, Python, PHP-FPM μέσω επιπλέον ρύθμισης ή backends Docker
- HTTP/2 και σύγχρονες προεπιλογές TLS χωρίς υπολογιστικό φύλλο κρυπτογράφησης
- Μονάδα systemd από το επίσημο πακέτο
Απαιτήσεις
Ένας τομέας πρέπει να επιλύεται σε αυτό το VPS πριν το Caddy μπορέσει να αποδείξει ACME HTTP-01. Αν το DNS ακόμη διαδίδεται, το Caddy θα αποτύχει στην έκδοση και θα ξαναπροσπαθήσει· μοιάζει σαν «το Caddy είναι σπασμένο» όταν είναι μόνο DNS. Σταματήστε πρώτα Apache ή Nginx αν κατέχουν 80/443.
- Ubuntu 22.04 ή 24.04
- Εγγραφή A τομέα στην IP του VPS (και AAAA αν χρησιμοποιείτε IPv6)
- Θύρες 80 και 443 ελεύθερες και επιτρεπόμενες στο τείχος προστασίας
- Root ή sudo
Βήμα 1: Εγκαταστήστε το Caddy από το επίσημο αποθετήριο
Μην εγκαταστήσετε τυχαίο παλιό Caddy από το προεπιλεγμένο Ubuntu universe αν θέλετε τρέχουσα συμπεριφορά TLS και ACME. Το έργο Caddy τεκμηριώνει πηγή apt. Μετά την εγκατάσταση υπάρχει ο χρήστης caddy και η υπηρεσία είναι ενεργοποιημένη.
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-pagerΒήμα 2: Πρώτο Caddyfile — στατικός ιστότοπος
Το προεπιλεγμένο Caddyfile είναι /etc/caddy/Caddyfile. Αντικαταστήστε το με τον τομέα σας. Το Caddy θα προσπαθήσει να πάρει πιστοποιητικό μόλις φορτωθεί η ρύθμιση αν το όνομα κεντρικού δεν είναι localhost. Βάλτε αρχεία ιστότοπου σε κατάλογο αναγνώσιμο από τον χρήστη caddy (συχνά δικαιώματα στυλ www-data, αλλά το πακέτο χρησιμοποιεί χρήστη caddy).
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 -fΒήμα 3: Αντίστροφος διαμεσολαβητής τοπικής εφαρμογής
Αν Gunicorn, Node ή Docker ακούει στο 127.0.0.1:8000, το Caddy πρέπει να είναι η μόνη δημόσια διεργασία. Η οδηγία reverse_proxy προωθεί κεφαλίδες Host και X-Forwarded-* με λογικό τρόπο για τις περισσότερες εφαρμογές. Αν η εφαρμογή παράγει απόλυτα URL HTTP, ορίστε σημαίες trusted proxy / HTTPS στην εφαρμογή (Django SECURE_PROXY_SSL_HEADER, Express trust proxy κ.λπ.).
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
# }Βήμα 4: Τείχος προστασίας και systemd
Επιτρέψτε 80 και 443. Η μονάδα του Caddy είναι caddy.service· το reload αρκεί μετά από επεξεργασίες Caddyfile αν η διεργασία είναι υγιής. Αν αλλάξετε μεταβλητές περιβάλλοντος για πρόσθετο DNS, πλήρης επανεκκίνηση είναι σαφέστερη. Τα πιστοποιητικά ζουν από προεπιλογή στο /var/lib/caddy/.local/share/caddy/ — συμπεριλάβετε αυτή τη διαδρομή στα αντίγραφα ασφαλείας αν σας νοιάζουν τα όρια ρυθμού κατά την επανεγκατάσταση.
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/Βήμα 5: Αρχεία καταγραφής, συμπίεση και κεφαλίδες
Τα αρχεία καταγραφής πρόσβασης βοηθούν όταν ένα bot χτυπά μια διαδρομή ή όταν διορθώνετε 404. Μπορείτε να καταγράφετε ανά ιστότοπο. Προσθέστε κεφαλίδες ασφαλείας αν φιλοξενείτε εφαρμογή προγράμματος περιήγησης· μην αντιγράψετε τεράστιο πακέτο κεφαλίδων χωρίς να κατανοείτε HSTS (μόλις ορίσετε μεγάλο max-age, τα προγράμματα περιήγησης το θυμούνται).
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 caddyΒήμα 6: PHP και άλλα πρόσθετα
Το Caddy μπορεί να μιλήσει με PHP-FPM με την οδηγία php_fastcgi. Αυτό αρκεί για πολλούς κεντρικούς WordPress ή Laravel, αλλά χρειάζεστε ακόμη εγκατεστημένο php-fpm και διαδρομή socket που ταιριάζει. Αν έχετε ήδη τέλεια ρύθμιση Nginx PHP, η μετάβαση σε ένα βράδυ είναι προαιρετική — το Caddy λάμπει περισσότερο σε αντίστροφο διαμεσολαβητή + στατικό + αυτόματο TLS.
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-fpmΜετάβαση από Nginx χωρίς εκπλήξεις διακοπής
Σταματήστε το Nginx πριν ξεκινήσετε το Caddy αλλιώς θα παλέψουν για 80/443. Χαμηλώστε το DNS TTL την προηγούμενη ημέρα αν μετακινείτε και IP. Δοκιμάστε με curl --resolve ώστε να χτυπήσετε το νέο VPS πριν αλλάξετε την εγγραφή A. Κρατήστε ρυθμίσεις Nginx στο git για μια εβδομάδα σε περίπτωση που χρειαστεί να επαναφέρετε.
- systemctl stop nginx && systemctl disable nginx
- Εγκαταστήστε Caddy, επικυρώστε Caddyfile, ξεκινήστε Caddy
- curl -I --resolve example.com:443:NEW_IP https://example.com
- Μόνο τότε αλλάξτε DNS αν η IP είναι νέα
- Η επανέκδοση είναι αυτόματη· μην τρέχετε επίσης Certbot στον ίδιο κεντρικό
Αντιμετώπιση προβλημάτων
Οι αποτυχίες ACME είναι σχεδόν πάντα DNS, τείχος προστασίας ή άλλη υπηρεσία στη θύρα 80. Οι γραμμές καταγραφής Caddy αναφέρουν tls.obtain. Αν ο ιστότοπος λειτουργεί σε HTTP αλλά όχι HTTPS, η έκδοση δεν ολοκληρώθηκε ποτέ. Αν βλέπετε πάρα πολλά πιστοποιητικά, χτυπήσατε όρια ρυθμού Let's Encrypt — χρησιμοποιήστε το CA σταδίου ενώ δοκιμάζετε, όχι παραγωγή.
- Το validate αποτυγχάνει: σύνταξη Caddyfile, λείπει άγκιστρο
- permission denied on root: chown caddy για τον κατάλογο ιστότοπου
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- certificate timeout: dig +short τον τομέα από το VPS, ufw allow 80
- 502 reverse_proxy: το backend είναι κάτω ή διαμεσολαβήσατε στο localhost από δίκτυο κοντέινερ λανθασμένα
Σημειώσεις ασφαλείας
Οι προεπιλογές TLS του Caddy είναι συντηρητικές. Η δουλειά σας είναι ασφάλεια εφαρμογής και SSH. Μην ενεργοποιήσετε το API διαχειριστή του Caddy σε δημόσια διεπαφή. Το προεπιλεγμένο τελικό σημείο διαχειριστή είναι τοπικό· αφήστε το έτσι. Αν χρησιμοποιείτε Caddyfile από το διαδίκτυο, διαβάστε κάθε matcher — ένα απόσπασμα που reverse_proxies /* σε εσωτερική IP μπορεί να γίνει ανοιχτός διαμεσολαβητής.
- Μην εκθέτετε το API διαχειριστή
- Κρατήστε το πακέτο ενημερωμένο
- HSTS μόνο αφού είστε σίγουροι ότι το HTTPS λειτουργεί για όλα τα ονόματα κεντρικών
- Χωρίστε ονόματα κεντρικών δοκιμής και παραγωγής για να προστατεύσετε όρια ρυθμού ACME
Συμβουλές
- caddy fmt --overwrite /etc/caddy/Caddyfile κρατά το αρχείο αναγνώσιμο
- Χρησιμοποιήστε αποσπάσματα import όταν έχετε πολλούς παρόμοιους ιστότοπους
- Για Docker είναι συνηθισμένη η εικόνα caddy:alpine με προσαρτημένο Caddyfile
- Τα πιστοποιητικά μπαλαντέρ χρειάζονται μονάδα DNS και διακριτικό API — προστατέψτε αυτό το διακριτικό
- Διαβάστε journalctl -u caddy πριν ξαναγράψετε όλο το αρχείο
Το Caddy σε VPS είναι: επίσημο πακέτο, σύντομο Caddyfile, θύρες 80/443 ανοιχτές, DNS που ήδη δείχνει στον διακομιστή και systemd reload μετά από επεξεργασίες. Χρησιμοποιήστε το ως διακομιστή στατικών αρχείων ή ως αντίστροφο διαμεσολαβητή μπροστά από Gunicorn, Node ή Docker. Το αυτόματο HTTPS λειτουργεί όταν το ACME μπορεί να απαντήσει στη θύρα 80· αν αποτύχει η έκδοση, διορθώστε DNS και συγκρούσεις θυρών πριν κατηγορήσετε το Caddy. Αντίγραφο ασφαλείας του /var/lib/caddy αν επανεγκαθιστάτε συχνά.