Obiz Solutions

Caddy là gì?

Caddy là một web server và reverse proxy viết bằng Go. Tính năng nổi bật nhất là HTTPS tự động: trỏ domain về server, khai báo domain đó trong cấu hình, Caddy sẽ tự xin và tự gia hạn chứng chỉ Let’s Encrypt — không cần certbot, không cron job, không gia hạn thủ công.

Cả một site chỉ với ba dòng

Cấu hình reverse proxy hoàn chỉnh, đã gồm HTTPS:

example.com {
    reverse_proxy app:3000
}

Đó là toàn bộ Caddyfile. Caddy lắng nghe cổng 80 và 443, chuyển HTTP sang HTTPS, lo chứng chỉ, và chuyển mọi request tới ứng dụng đang chạy ở cổng 3000.

Vì sao đặt reverse proxy trước ứng dụng

  • TLS ở một chỗ: ứng dụng nói HTTP thường bên trong; Caddy kết thúc HTTPS ở lớp ngoài cùng.
  • Một điểm vào công khai: chỉ cổng 80/443 được mở — ứng dụng và database nằm trong mạng nội bộ.
  • Dễ mở rộng: nén, cache, thêm route, hay thêm một ứng dụng thứ hai sau hostname khác đều là thay đổi cấu hình, không phải sửa code.

Caddy với Docker Compose

Trong Compose, Caddy chỉ là một service như các service khác. Các container gọi nhau bằng tên service (app ở trên), và một volume giữ chứng chỉ qua các lần restart để không bị cấp lại sau mỗi lần deploy:

caddy:
  image: caddy:2-alpine
  ports: ["80:80", "443:443"]
  volumes:
    - ./caddy/Caddyfile:/etc/caddy/Caddyfile
    - caddy_data:/data

Một điểm cần lưu ý: IP của người dùng

Sau proxy, ứng dụng thấy mọi request đều đến từ IP nội bộ của Caddy chứ không phải của khách truy cập. Caddy chuyển địa chỉ thật trong header X-Forwarded-For, và ứng dụng phải được bật tuỳ chọn tin tưởng header này — nếu không, mọi thứ dựa trên IP như giới hạn tốc độ đăng nhập sẽ coi tất cả khách là một người. Trong Fastify đó là tuỳ chọn trustProxy (xem Fastify là gì?).

Caddy so với Nginx

Nginx tinh chỉnh được sâu hơn ở quy mô rất lớn và có nhiều công thức cấu hình hơn. Caddy thắng ở sự đơn giản: cấu hình nhỏ, mặc định hợp lý, TLS chạy ngay. Với một ứng dụng trên một VPS, Caddy thường là đường ngắn hơn.

Đọc thêm

Tài liệu chính thức: caddyserver.com/docs