Cài đặt Caddy trên Ubuntu: Reverse Proxy với HTTPS tự động trong ‘một nốt nhạc’

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Vì sao mình ‘chia tay’ Nginx để sang với Caddy?

Nginx từng là lựa chọn không cần suy nghĩ của mình mỗi khi dựng server. Nhưng thật lòng mà nói, việc phải đánh vật với file config dài cả trăm dòng hay cài thêm Certbot, cấu hình cronjob chỉ để duy trì cái chứng chỉ SSL khiến mình tốn quá nhiều thời gian vô ích. Có những lúc chỉ vì sai một dấu chấm phẩy mà cả hệ thống lăn đùng ra chết.

Caddy xuất hiện như một cứu cánh. Thay vì mất 30 phút loay hoay với Nginx, mình chỉ tốn đúng 2 phút với Caddy để có HTTPS xanh mướt. Điểm ăn tiền nhất là Caddy được viết bằng Go, cực kỳ nhẹ và tự động hóa 100% việc cấp phát, gia hạn SSL từ Let’s Encrypt hoặc ZeroSSL. Bạn không cần cài thêm bất cứ tool nào bên ngoài, Caddy lo từ A đến Z.

Triển khai Caddy trên Ubuntu trong 5 phút

Trước khi bắt đầu, anh em chuẩn bị một VPS Ubuntu (ưu tiên 22.04 trở lên). Hãy trỏ bản ghi A của domain về IP server trước để Caddy có thể xác thực SSL ngay lập tức.

1. Cài đặt từ Repository chính thức

Để việc update sau này nhẹ nhàng hơn, mình khuyên anh em nên cài qua repo thay vì tải file binary thủ công.

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

2. Kiểm tra dịch vụ

Ngay sau khi cài xong, Caddy sẽ tự kích hoạt. Anh em gõ lệnh này để chắc chắn mọi thứ đã ổn định:

systemctl status caddy

3. Cấu hình Reverse Proxy siêu giản lược

Hãy tưởng tượng bạn đang chạy một con API Node.js ở port 3000. Để đưa nó lên domain itfromzero.io với HTTPS, hãy mở file cấu hình:

sudo nano /etc/caddy/Caddyfile

Thay thế toàn bộ nội dung bằng 3 dòng ngắn gọn này:

itfromzero.io {
    reverse_proxy localhost:3000
}

Lưu lại và nạp lại cấu hình cho Caddy:

sudo systemctl reload caddy

Chỉ thế thôi. Caddy sẽ tự liên hệ với Let’s Encrypt, lấy chứng chỉ và cài đặt vào server. Nếu làm việc này với Nginx, bạn có thể phải viết tới 20-30 dòng code.

Giải mã Caddyfile: Cấu hình chưa bao giờ dễ thế

Caddyfile có cú pháp rất hiện đại và dễ đọc. Nó bỏ qua những rào cản kỹ thuật rắc rối để tập trung vào những gì dev cần.

Hệ thống package trên Ubuntu có thể khiến bạn mất vài ngày để quen, nhưng với Caddyfile, bạn chỉ cần 15 phút. Muốn chạy nhiều site trên một server? Chỉ việc liệt kê chúng ra là xong:

app1.itfromzero.io {
    reverse_proxy localhost:3000
}

app2.itfromzero.io {
    reverse_proxy localhost:4000
}

Tối ưu Caddy cho dự án thực tế

Trong môi trường production, chúng ta cần nhiều hơn là một cái proxy cơ bản. Đây là vài cấu hình mình thường dùng để tăng tốc và bảo mật server.

Phục vụ file tĩnh (SPA như React/Vue)

Nếu bạn deploy app React đã build, dùng lệnh này để xử lý routing phía client:

mysite.com {
    root * /var/www/mysite/dist
    file_server
    try_files {path} /index.html
}

Bật nén dữ liệu Zstd & Gzip

Để trang web load nhanh hơn, hãy bật nén. Caddy hỗ trợ Zstd – thuật toán nén hiện đại giúp giảm dung lượng file hiệu quả hơn 10-20% so với Gzip truyền thống:

itfromzero.io {
    encode zstd gzip
    reverse_proxy localhost:3000
}

Quản lý Logs chuyên nghiệp

Đừng để log lẫn lộn trong hệ thống. Hãy tách chúng ra file JSON để dễ dàng theo dõi qua các công cụ phân tích dữ liệu:

itfromzero.io {
    log {
        output file /var/log/caddy/access.log
        format json
    }
    reverse_proxy localhost:3000
}

Vài mẹo nhỏ rút ra từ kinh nghiệm ‘xương máu’

Khi dùng Caddy trên Ubuntu, có hai thứ bạn nên biết để tránh mất thời gian. Thứ nhất, luôn dùng lệnh caddy validate trước khi reload để tránh làm sập server do sai cú pháp. Thứ hai, nếu server nằm sau firewall gắt gao không dùng được HTTP challenge, hãy dùng xcaddy để build bản custom hỗ trợ DNS challenge (như Cloudflare).

Lời kết: Nên chọn Caddy hay Nginx?

Nginx vẫn là ‘ông vua’ hiệu năng ở quy mô khổng lồ với hàng triệu request mỗi giây. Tuy nhiên, với 90% các dự án vừa và nhỏ, Caddy thắng tuyệt đối nhờ sự tiện dụng. Nó giúp anh em bớt đau đầu về SSL, file config gọn gàng và tập trung hoàn toàn vào việc code app.

Caddy mang lại cảm giác hiện đại và thông minh. Nếu bạn đã chán cảnh ngồi canh ngày gia hạn SSL, hãy thử cài Caddy lên Ubuntu ngay hôm nay. Chắc chắn bạn sẽ không muốn quay lại dùng Nginx cho các dự án cá nhân nữa đâu!

Share: