Khi chúng ta vận hành website thì có những lúc web bị lỗi gặp sự cố không truy cập được bạn cần một trang thông báo bảo trì, hoặc chúng ta đơn giản là muốn tạo một thông báo lỗi 404 trên website khi vào những link không tồn tại
Trong caddy có hỗ trợ chúng ta chuyển hướng mỗi khi website gặp lỗi sự cố thông qua việc call tới handle_errors, với handle_errors chúng chỉ hoạt động khi website gặp lỗi trả về http status code khác 200 302 301, tất cả cấu hình này đều được thêm trong cấu hình của block domain
handle_errors sẽ trả về cho chúng ta các thông tin như sau
| Tên | Mô Tả |
| {err.status_code} | Mã trạng thái lỗi: vd 404 502 |
| {err.status_text} | Text theo lỗi tưng ứng như 404 là not found |
| {err.message} | Full log lỗi trả về từ ứng dụng |
| {err.trace} | Nguồn gốc của lỗi từ đâu |
| {err.id} | đánh dấu ID để nhận dạng lỗi khi nó xuất hiện |
cấu hình cơ bản của handle_errors như sau chúng ta cùng phân tích
handle_errors {
rewrite * /{err.status_code}.html
file_server
}Ở đây mỗi klhi web gặp sự cố lỗi 404 403 500 502… thì hệ thống sẽ tự động chuyển hướng hết các truy cập về thông báo lỗi trang tương ứng là 404.html, 403.html, 500.html, 502.html….. bạn cũng có thể cố định nó bằng 1 file err.html
ví dụ cho một cấu hình hoàn chỉnh nhìn nó sẽ như sau
caddy2.manhtuong.net {
reverse_proxy 193.123.81.136:8888
handle_errors {
rewrite * /{err.status_code}.html
file_server
}
log {
output file /home/caddy/caddy.manhtuong.net.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
}
}Ngoài chức năng nói trên thì handle_errors còn cho phép chúng ta chuyển hướng tới server dự phòng nếu máy chủ chính lỗi thông qua cấu hình reverse_proxy kết hợp như sau
handle_errors {
rewrite * /{err.status_code}
reverse_proxy maychu_phu:9999 {
header_up Host {upstream_hostport}
}
}Với cấu hình trên mỗi khi website chính của chúng ta gặp lỗi thì dữ liệu được đẩy qua máy chủ khác (maychu_phu:9999) để xử lý nâng cao hiệu suất xử lý từ đó giảm tác động tới user. Cấu hình hoàn chỉnh nó sẽ như sau
caddy2.manhtuong.net {
reverse_proxy 193.123.81.136:8888
handle_errors {
rewrite * /{err.status_code}
reverse_proxy maychu_phu:9999 {
header_up Host {upstream_hostport}
}
}
log {
output file /home/caddy/caddy.manhtuong.net.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
}
}Bạn có thể cấu hình chuyển hướng lỗi 404 về trang chủ như sau khi kết hợp với expression như sau
caddy.manhtuong.net {
reverse_proxy 193.123.81.136:8888
handle_errors {
@404 expression `{err.status_code} in [404]`
handle @404 {
redir https://caddy.manhtuong.net
}
}
log {
output file /home/caddy/caddy.manhtuong.net.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
}
}Tùy nhu cầu hãy cấu hình nó theo yêu cầu của bạn cần