Caddy Server - Web server mã nguồn mở, tiện dụng

howznguyen

Administrator
Nhân viên
17 Tháng sáu 2025
2
1
3
24
Đối với các bạn lập trình viên lâu năm, Apache hay Nginx luôn là một trong những Web server được lựa chọn hàng đầu. Nhất là Nginx, một web server được đánh giá tốt về tốc độ, tính linh hoạt và sự mạnh mẻ của nó. Tuy nhiên, với sự ra đời của một Open Source Web Server - Caddy Server, trở thành đối trọng của Nginx. Trong bài viết này, chúng ta sẽ đi sâu vào các tính năng, ưu điểm và cả nhược điểm của Caddy.


a110cd80-a7df-11ea-8184-27bb6573a7fa.png

CADDY LÀ GÌ?

Caddy Server là một Open Source Web Server được xây dựng từ 2015. Với mã nguồn được phát triển từ Golang (Go), Caddy cung cấp những tính năng mạnh mẽ cho nhà phát triển web. Tính năng nổi bật nhất mà Open Source này có là tự động xác thực chứng chỉ HTTPS (Let’s Encrypt SSL), giúp loại bỏ sự phức tạp của việc quản lý chứng chỉ SSL/TLS theo cách thủ công. Cùng với có một thiết kế để chạy chỉ trong một lệnh (work out of the book), làm nó trở thành một lựa chọn hấp dẫn dành cho các nhà phát triển cần một hệ thổng quản lý dễ triển khai.
Các tính năng của Caddy:

  • Tự động xác thực HTTPS
  • Cấu hình từ file Caddyfile
  • Hỗ trợ HTTP/1.1, HTTP/2, HTTP/3
  • Đa tính năng: web server, reverse proxy, load balancer
  • Mở rộng nhanh chóng nhờ thiết kế theo dạng mô-đun (modular architecture)
  • Và nhiều tính năng khác...

CÀI ĐẶT CADDY SERVER

Caddy Server có thể cài đặt thông qua nhiều cách theo hướng dẫn ở đây.
Tuy nhiên mình thường sử dụng cài đặt trên Debian cho server và Docker cho môi trường phát triển.

CÀI ĐẶT TRÊN DEBIAN (UBUNTU)

Để cài đặt trên server, chúng ta sẽ chạy câu lệnh này trên shell hoặc bash của máy chủ:
Bash:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Kết quả sau khi cài đặt

SCR-20250712-spme.png

CÀI ĐẶT BẰNG DOCKER

Chúng ta cũng có thể cài đặt bằng Docker (hoặc Docker Compose) để triển khai một hệ thống web bằng Caddy.
Đầu tiên chúng ta sẽ tạo một thư mục với cấu trúc file như sau:
Mã:
.
├── Caddyfile
└── docker-compose.yml

1 directory, 2 files
Với file Caddyfile - hay còn gọi là file cấu hình của Caddy, chúng ta có thể tạo mẫu một response.
Mã:
:80 {
    respond "Hello world"
}

Còn với file docker-compose.yml, chúng ta sẽ cấu hình cho container này như sau:
YAML:
services:
  caddy:
    image: caddy:alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./html:/var/www/html
      - ./caddy_data:/data
      - ./caddy_config:/config
Sau khi hoàn tất, chúng ta sẽ dùng lệnh để chạy docker-compose:

Bash:
docker-compose up -d
1752331587814.png


Đến khi hoàn tất việc cài đặt hệ thống, chúng ta có thể truy cập vào localhost để kiểm tra xem hệ thống đã khởi tạo ok chưa.
1752331705711.png

SO SÁNH GIỮA CADDY VÀ NGINX

CÚ PHÁP CẤU HÌNH

Nginx: Cấu hình của Nginx cần người dùng hiểu được sâu vào cấu hình của nó. Kể cả một cấu hình reverse proxy đơn giản.
Example (Nginx reverse proxy):
NGINX:
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Caddy: Với tệp cấu hình trực quan (Caddyfile), việc thiết lập reverse proxy hoặc một trang web tĩnh trở nên vô cùng đơn giản.
Example (Caddy reverse proxy):

NGINX:
example.com {
    reverse_proxy localhost:8080
}

AUTOMATIC HTTPS​

Nginx: Cần phải yêu cầu certificate được tạo hoặc gia hạn thủ công hoặc tích hợp một tool như Certbot

Example (Nginx HTTPS):

NGINX:
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}


Caddy: Tự động xử lý HTTPS ngay khi cài đặt, bao gồm tạo và gia hạn chứng chỉ thông qua Let’s Encrypt.
Example (Caddy HTTPS):
NGINX:
example.com {
    reverse_proxy localhost:8080
}
Custom TLS Example:
NGINX:
example.com {
    tls /path/to/cert.pem /path/to/key.pem
    reverse_proxy localhost:8080
}

HIỆU NĂNG

Dù cả hai đều có hiệu suất cao, nhưng kiến trúc hiện đại của Caddy mang lại cho nó một lợi thế trong các hệ sinh thái dựa trên Golang.

1752332967073.png

Hình ảnh được trích dẫn từ Nguồn 35 Million Hot Dogs: Benchmarking Caddy vs. Nginx
Dưới đây là một vài benchmark của một số tác giả đã thực hiện:

KẾT LUẬN​

Caddy đại diện cho một bước tiến vượt bậc trong công nghệ máy chủ web. Sự đơn giản, thiết kế hiện đại và các tính năng tích hợp sẵn khiến nó trở thành một ứng cử viên sáng giá để thay thế Nginx trong nhiều trường hợp. Cho dù bạn đang lưu trữ một trang web tĩnh, chạy proxy ngược hay xây dựng kiến trúc microservice, Caddy đều đáng để cân nhắc. Việc tập trung vào việc giảm thiểu sự phức tạp cho nhà phát triển và tự động hóa các tác vụ tẻ nhạt khiến nó trở thành một bước ngoặt trong lĩnh vực máy chủ web.

Nguồn Tổng Hợp | howznguyen
 
Chỉnh sửa lần cuối:

Thành viên trực tuyến

Không có thành viên nào trực tuyến.

Thống kê diễn đàn

Chủ đề
2
Bài viết
2
Thành viên
2
Thành viên mới nhất
somethingnew