Caddy: website có chứng chỉ sẵn sàng
Máy chủ web tự lấy và gia hạn chứng chỉ HTTPS. Cài đặt trên VPS, Caddyfile tối giản và chuyển từ Nginx.
Cập nhật 23 tháng 8, 2026
Caddy làm được điều tương tự như Nginx, nhưng tự cấp và gia hạn chứng chỉ Let's Encrypt. Cấu hình cho một site chỉ gói gọn trong ba dòng, nên với dự án đầu tiên trên VDS, đây là con đường ngắn nhất để có HTTPS hoạt động.
Cài đặt
Debian và Ubuntu — từ kho chính thức:
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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' \
> /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddy
AlmaLinux và CentOS Stream:
dnf install -y 'dnf-command(copr)'
dnf copr enable -y @caddy/caddy
dnf install -y caddy && systemctl enable --now caddy
Site đầu tiên của bạn
Toàn bộ cấu hình nằm trong /etc/caddy/Caddyfile:
example.ru {
root * /var/www/example.ru
file_server
encode gzip zstd
}
mkdir -p /var/www/example.ru
echo '<h1>Works</h1>' > /var/www/example.ru/index.html
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
Vài giây sau yêu cầu đầu tiên, site sẽ mở tại https://example.ru. Bạn không cần khởi động thêm gì nữa: Caddy đã tự lấy chứng chỉ và sẽ tự động gia hạn.
Proxy cho ứng dụng
Nếu bạn có dịch vụ Node.js hoặc Python trên một cổng nội bộ, cấu hình sẽ như sau:
api.example.ru {
reverse_proxy 127.0.0.1:3000
}
Caddy tự thêm các header X-Forwarded-For và X-Forwarded-Proto. Để hiểu rõ hơn về cách hoạt động, xem reverse proxy.
Nhiều site chỉ là nhiều block trong cùng một file, xem nhiều site trên một máy.
Những gì cần kiểm tra trước
- Bản ghi A của domain trỏ đến địa chỉ máy trong mục “Tổng quan” của bảng điều khiển
/hosting/vds/m/<id>; - cổng 80 và 443 đã mở trong tường lửa của máy và không bị Nginx hay Apache chiếm;
- domain thực sự phân giải được:
dig +short example.ru.
Nếu chưa làm xong mục đầu tiên, việc cấp chứng chỉ sẽ thất bại: Let's Encrypt phải truy cập được máy của bạn theo tên domain.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân |
|---|---|
could not get certificate | Domain không trỏ đến máy, hoặc cổng 80 bị đóng |
address already in use | Nginx hoặc Apache đang chạy — hãy dừng một trong hai |
| Site chỉ mở được qua HTTP | Trong Caddyfile có ghi :80 hoặc http:// trước tên |
| Quá nhiều lần thử cấp chứng chỉ | Let's Encrypt có giới hạn — hãy gỡ lỗi bằng tls internal |
Log: journalctl -u caddy -f.
Caddy lưu chứng chỉ trong
/var/lib/caddy/.local/share/caddy. Khi cài lại hệ thống ở tab “Truy cập”, hãy sao chép thư mục này, nếu không việc cấp chứng chỉ sẽ bắt đầu lại từ đầu sau khi cài lại.