Khoá học ngắn về Caddy
Caddy: thứ tự route và reverse_proxy
Caddy giải cùng một bài toán với nginx — request này do khối nào xử lý, và backend nhận đường dẫn
nào — nhưng bằng hai cơ chế khác hẳn. Khoá này đo cả hai trên Caddy v2.11.4 trong container
caddy:2-alpine, và ở chỗ nào có thể thì đặt cạnh số đo tương ứng của nginx 1.27.5.
location theo đúng thứ tự bạn viết.
Caddy thì sắp lại danh sách route ngay lúc đọc Caddyfile, rồi chạy tuyến tính: lấy route
đầu tiên khớp. Hệ quả đo được: đổi chỗ hai dòng trong Caddyfile có thể đổi kết quả, còn đổi chỗ
hai khối location của nginx thì không.
Lộ trình
Mỗi bài khoảng 10–15 phút đọc, kèm một phòng thí nghiệm chạy ngay trên trình duyệt.
Caddy sắp lại route trước khi chạy
Quy tắc sắp xếp suy ra từ 16 cấu hình chạy qua caddy adapt, kèm lab tự gõ Caddyfile và đối chiếu với 14 kết quả curl.
reverse_proxy và tiền tố đường dẫn
Caddy không tự cắt tiền tố. Bảy tổ hợp đã đo, trong đó một tổ hợp trả 400 và một tổ hợp trả 502 mà caddy validate vẫn báo hợp lệ.
Cách đo
Mỗi bài dựng một container caddy:2-alpine. Với bài 1, mỗi khối handle
trả về tên của chính nó rồi gọi curl qua từng đường dẫn; ngoài ra chạy
caddy adapt để đọc thứ tự route trong cấu hình JSON mà Caddy thực sự dùng. Với bài 2,
một server thứ hai trong cùng container đóng vai backend và in lại
{http.request.uri} mà nó nhận.
docker run -d --name cdlab -p 8097:80 \
-v "$PWD/Caddyfile:/etc/caddy/Caddyfile:ro" \
caddy:2-alpine
curl -s http://localhost:8097/img/a.gif
# 3 regex-gif-jpg
docker run --rm -v "$PWD/Caddyfile:/c:ro" caddy:2-alpine \
caddy adapt --config /c --adapter caddyfile
caddy adapt là thứ làm khoá này đo được: nó in ra danh sách route đã sắp xếp, nên
không phải suy đoán thứ tự. Thuật toán JavaScript trong hai phòng thí nghiệm được đối chiếu với
16 kết quả caddy adapt, 14 kết quả curl của bài 1 và 13 tổ hợp của bài 2.