Skip to content
VDS · Website và máy chủ web

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ứngNguyên nhân
could not get certificateDomain không trỏ đến máy, hoặc cổng 80 bị đóng
address already in useNginx hoặc Apache đang chạy — hãy dừng một trong hai
Site chỉ mở được qua HTTPTrong 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.