Πίσω στο blog
Αύγουστος 19, 2026Οδηγοί

Πώς να εγκαταστήσετε τον διακομιστή ιστού Caddy με αυτόματο HTTPS

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

Πώς να εγκαταστήσετε τον διακομιστή ιστού Caddy με αυτόματο HTTPS

Το 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 και η υπηρεσία είναι ενεργοποιημένη.

bash
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).

bash
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 κ.λπ.).

bash
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/ — συμπεριλάβετε αυτή τη διαδρομή στα αντίγραφα ασφαλείας αν σας νοιάζουν τα όρια ρυθμού κατά την επανεγκατάσταση.

bash
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, τα προγράμματα περιήγησης το θυμούνται).

bash
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.

bash
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 αν επανεγκαθιστάτε συχνά.