Câu trả lời:
Bạn có thể sử dụng errorfile
chỉ thị và sau đó là một .http
tệp văn bản tùy chỉnh . Ví dụ:
errorfile 503 /etc/haproxy/errors/503-mycustom.http
Nội dung của tệp sau đó sẽ là một cái gì đó như:
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html>
<head>
<title>RARRR!!!!!</title>
</head>
<body style="font-family:Arial,Helvetica,sans-serif;">
<div style="margin: 0 auto; width: 960px;">
<h2 >RAWR RAWR RAWR</h2>
</div>
</body>
</html>
Các errorfile
chỉ thị có thể được cụ thể cho một backend là tốt.
Cài đặt "errorfile" không thể được sử dụng để thay đổi phản hồi được gửi bởi HAProxy nếu các nút trực tuyến. Cài đặt này chỉ ảnh hưởng đến HAProxy khi tất cả các nút ngoại tuyến.
Điều quan trọng là phải hiểu rằng từ khóa này không có nghĩa là viết lại các lỗi được máy chủ trả về, nhưng các lỗi được HAProxy phát hiện và trả về. Đây là lý do tại sao danh sách các lỗi được hỗ trợ bị giới hạn trong một bộ nhỏ.
Có một cái gì đó bẩn bạn có thể làm. Bạn có thể chặn phản hồi 503, điều này sẽ dẫn đến việc trả về lỗi 502 tùy chỉnh mà bạn có thể tạo trang lỗi. Tuy nhiên, hãy nhớ rằng bất kỳ lý do nào haproxy sẽ phải trả lại 502 (phản hồi không hợp lệ) sẽ trả lại điều tương tự.
Về cơ bản, nó đơn giản như "rspdeny ^ HTTP / 1.1 503" kết hợp với "errorfile 502".
Chúng tôi có một phần trang web của chúng tôi đang chạy trên một hệ thống cũ và tôi đã kết thúc bằng cách sử dụng như sau:
errorfile 502 /etc/haproxy/errors/502.http
acl is_internal_error status ge 500
rspideny . if is_internal_error
Hy vọng nó sẽ giúp (ngay cả khi nó là 8 tháng sau).
\r\n
để ngắt dòng trong các tiêu đề để tuân thủ đặc tả giao thức HTTP. Nếu tải lên từ hộp cửa sổ, hãy đảm bảo sử dụngbinary
chế độ để truyền tệp s / ftp để bỏ qua chuyển đổi ngắt dòng cửa sổ\r\n
sang ngắt dòng unix\n
.