Phục vụ 404 từ HAProxy khi không có acls phù hợp


15

Tôi hiện đang định cấu hình lại HAProxy bằng 1.5dev-17. Điều tôi muốn làm là trả về lỗi 404 khi không có phụ trợ để sử dụng cho một yêu cầu cụ thể.

Cấu hình hiện tại của chúng tôi sử dụng default_backend để định tuyến đến các máy chủ ứng dụng django của chúng tôi, nhưng khi có rất nhiều yêu cầu thăm dò (như kiểm tra bút) không khớp với bất kỳ phụ trợ nào được cấu hình khác, các máy chủ django của chúng tôi sẽ dừng lại khi họ thử để phục vụ các yêu cầu không hợp lệ này, cuối cùng trả về 404.

Tôi muốn phục vụ 404 từ HAProxy hơn là ủy thác cho các phụ trợ django. Tôi hiện đang đạt được điều này với một hack:

frontend www
    ...
    default_backend nomatch

backend nomatch
    errorfile 503 /var/www/http/404.http

Và trong tệp 404.http, tôi đặt mã trạng thái 404 trong các tiêu đề. Điều này hoạt động, nhưng cảm thấy rất sai. Có cách nào tốt hơn để đạt được điều này với HAProxy không? Hoặc tôi nên sử dụng một phụ trợ thông thường và chỉ để xử lý đó phản hồi với 404?


Nội dung của tệp 404.http là gì?
Jason Floyd

3
@JasonFloyd HTTP/1.0 404 Not Foundtheo sau là một số tiêu đề khác, sau đó là một dòng trống, sau đó là <html>nội dung.
Josh Smeaton

Câu trả lời:


4

Nếu bạn sẽ ổn với bất kỳ mã phản hồi nào sau đây: 200, 400, 403, 405, 408, 429, 500, 502, 503 hoặc 504.

Sau đó, bạn có thể làm một cái gì đó như thế này:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

2

Sau khi muốn một cái gì đó tương tự, đây là điều tương tự tôi nghĩ ra. Nó cảm thấy sai nhưng nó hoạt động rất tốt trong thực tế và sạch sẽ hơn nhiều so với việc cố gắng đưa vào danh sách đen các url cụ thể. Chỉ cần chắc chắn để lại một bình luận để không ai đi qua nó nghĩ rằng nó không chính xác.

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.