Sau một thời gian dài gắn bó với Nginx và OpenLiteSpeed, gần đây mình đang dần chuyển qua sử dụng Caddy ứng dụng làm web server cho các website và reverse proxy cho các dịch vụ mạng trong homelab ở nhà.
So với Nginx và Openlitesped, Caddy cài đặt nhanh chóng dễ sử dụng hơn rất nhiều. Chỉ cần cấu hình 3 dòng lệnh tương tự như bên dưới là đã thiết lập xong 1 reverse proxy, đồng thời được thiết lập SSL tự động từ Let’s Encrypt.
webserver.blntech.asia {
reverse_proxy 192.168.1.250:9000
}
Bài viết hôm nay mình sẽ giới thiệu nhanh về Caddy Server cùng cách cài đặt và sử dụng.
1. Giới thiệu Caddy Server
Caddy Server là một phần mềm web server mã nguồn mở được phát triển dựa trên ngôn ngữ lập trình Golang (Go). Được ra đời từ 2015, Caddy liên tục được bổ sung nhiều tính năng mạnh mẽ, trong đó đáng chú ý nhất là việc hỗ trợ HTTP / 3.0 và tự động xác thực chứng chỉ Let’s Encrypt SSL.
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 bằng Docker
Bạn có thể cài đặt Caddy bằng nhiều cách thông qua hướng dẫn ở đây.
Mình chọn cách cài đặt bằng Docker để có thể dễ dàng xóa đi khi cần mà không ảnh hưởng đến hệ thống.
Tạo file compose.yml
mkdir ~/caddy
cd ~/caddy
nano compose.yml
Nhập vào nội dung sau
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
Tạo thêm file Caddyfile
nano Caddyfile
và nhập tạm vào nội dung
:80 {
respond "Hello, world!"
}
Kích hoạt Caddy
docker compose up -d
Mở trình duyệt truy cập vào địa chỉ http://<IP>
, nếu thấy hiện ra dòng chữ Hello, world!
nghĩa là Caddy đã được cài đặt và kích hoạt thành công.
3. Cấu hình Caddy làm Reverse Proxy
Để cấu hình Caddy làm Reverse Proxy cho Portainer đang chạy ở địa chỉ 192.168.1.250:9000
, mình chỉnh sửa file Caddyfile và bổ sung thêm 3 dòng sau
portainer.blntech.asia {
reverse_proxy 192.168.1.250:9000
}
Sau đó khởi động lại Caddy bằng lệnh
docker compose exec -w /etc/caddy caddy caddy reload
Chờ 1-2 phút để Caddy hoàn thành bước xác thực chứng chỉ SSL, giờ mình đã có thể truy cập Portainer thông qua địa chỉ https://portainer.blntech.asia
Trong trường hợp Portainer và caddy nằm cùng trên 1 server, bạn có thể tham khảo bài viết dưới đây để biết cách thiết lập các container vào chung 1 docker network và chỉnh sửa lại Caddyfile như sau
portainer.blntech.asia {
reverse_proxy portainer
}
Mình cũng đã chuyển website blntech.asia này qua chạy trên nền Docker và được Reverse Proxy thông qua Caddy. Khi check curl -I https://blntech.asoa
sẽ hiện ra thông tin server: Caddy
HTTP/2 200
accept-ranges: bytes
alt-svc: h3=":443"; ma=2592000
content-type: text/html; charset=utf
etag: "sa2ao42enp"
last-modified: Sat, 09 Mar 2024 03:50:28 GMT
server: Caddy
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
content-length: 112309
date: Sat, 09 Mar 2024 03:58:40 GMT
Done.
Nguồn: thuanbui