Trong bài viết này mình chia sẻ với anh em một Web server dùng làm Reverse Proxy gọn nhẹ và hiệu suất cao đó là Caddy Server

caddy-reverse-proxy

1. Giới thiệu Caddy Server

Caddy Server là một web server mã nguồn mở được viết bằng ngôn ngữ Go. Nó nổi bật với cấu hình đơn giản và khả năng tự động cấp chứng chỉ HTTPS, giúp bảo mật kết nối dễ dàng hơn. Caddy cũng hỗ trợ HTTP/2 và HTTP/3, đi kèm với nhiều tính năng hiện đại như cân bằng tải và Reverse proxy. Được thiết kế để dễ sử dụng và hiệu suất cao, Caddy thường được chọn làm giải pháp thay thế cho Nginx và Apache trong nhiều dự án web.

Các tính năng của Caddy:

  • Tùy biến cấu hình dễ dàng với Caddyfile
  • Tùy biến cấu hình nâng cao với native JSON config
  • Tự động xác thực HTTPS
  • Đa tính năng: web server, reverse proxy, load balancer
  • Production-ready
  • Hỗ trợ HTTP/1.1, HTTP/2, and HTTP/3
  • Dễ dàng mở rộng tính năng nhờ thiết kế modular architecture
  • Hỗ trợ nhiều hệ điều hành, và không bị phụ thuộc dependencies
  • Và còn nhiều tính năng khác chờ bạn khám phá

2. Cài đặt Caddy Server

Để đơn giản mình triển khai Caddy Server bằng Docker

Tạo file docker-compose.yml

mkdir ~/caddy
cd ~/caddy
nano compose.yml
version: '3.8'
services:
  caddy:
    container_name: caddy
    image: caddy:alpine
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - reverse_proxy
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:

networks:
  reverse_proxy:
    external: true

Tạo file Caddyfile với nội dung sau. Anh em lưu ý đổi lại subdomain.

nano Caddyfile
caddy.kienletv.com {
    respond / "Hello World" 200
    tls internal
}

Khởi chạy Caddy Server

docker network create reverse_proxy
docker compose up -d

Mở trình duyệt truy cập vào địa chỉ https://caddy.kienletv.com, nếu thấy hiện ra dòng chữ  Hello, world! nghĩa là Caddy đã được cài đặt thành công.

3. Sử dụng Caddy làm Reverse Proxy

Tạo ứng dụng Uptime Kuma bằng docker-compose như sau:

nano compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    volumes:
      - ./data:/app/data
    restart: unless-stopped
    networks:
      - reverse_proxy     

networks:
  reverse_proxy:
    external: true

Khởi chạy Uptime Kuma

docker-compose up -d

Để cài đặt Caddy làm Reverse Proxy cho Uptime Kuma ở trên mình thêm vào file Caddyfile như sau:

kuma.kienletv.com {
    reverse_proxy uptime-kuma:3001
}

Khởi tạo lại Caddy Server

docker-compose  up -d --force-recreate

Mở trình duyệt truy cập vào địa chỉ https://kuma.kienletv.com và xem kết quả

Tạo ứng dụng khác sử dụng caddy làm reverse Proxy

mkdir whoami
nano compose.yml
version: '3.7'
services:
  whoami:
    image: traefik/whoami
    networks:
      - reverse_proxy

networks:
  reverse_proxy:
    external: true

Thêm vào file Caddyfile như sau:

whoami.kienletv.com {
        reverse_proxy whoami:80
}

Khởi chạy ứng dụng

docker-compose up -d

Khởi tạo lại Caddy

docker-compose  up -d --force-recreate

Kiểm tra ứng dụng

4. Tổng kết

Như vậy, qua bài viết này mình chia sẻ với anh em cách xây dựng Caddy để làm Reverse Proxy. Ngoài ra anh em có thể tham khác nhiều cách nữa để xây dựng một Web Server Reverse Proxy trong các bài viết trước của tại đây.

5. Nguồn tham khảo

Một số nguồn tham khảo mình để link bên dưới anh em đọc thêm