Làm cách nào để sử dụng tài liệu lỗi 503 tùy chỉnh khi HAProxy gửi mã 503 HTTP?


20

Tôi muốn haproxy sử dụng trang tài liệu 503 của riêng mình khi máy chủ quay lại (phụ trợ) gửi mã HTTP 503. Có thể không?

Đã thấy một cái gì đó như điều kiện "màn hình thất bại" nhưng không biết cách thêm nó vào frontend.

Câu trả lời:


22

Bạn có thể sử dụng errorfilechỉ thị và sau đó là một .httptệ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 errorfilechỉ 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ỏ.


2
Lưu ý rằng tệp .http phải được sử dụng \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ụng binarychế độ để truyền tệp s / ftp để bỏ qua chuyển đổi ngắt dòng cửa sổ \r\nsang ngắt dòng unix \n.
wqw

6

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".


5

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).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.