Tôi rất bối rối và không thể tìm ra câu trả lời: điều gì sẽ khiến việc thực thi các dòng cấu hình trong haproxy dừng lại hoặc tất cả sẽ được thực thi và đánh giá ở cuối?
Tôi đã có ấn tượng rằng nếu một điều kiện từ chối yêu cầu http [...]
sẽ kích hoạt, nó sẽ dừng thực thi ngay tại đó, nhưng sau đó một số ví dụ không có ý nghĩa gì.
Ví dụ (từ tài liệu haproxy):
giao diện người dùng fe_main
ràng buộc: 80
# xác định bảng dính
ip loại bảng dính kích thước 100k hết hạn cửa hàng 24h http_req_rate(5s),gpc0,gpt0
# bắt đầu theo dõi các yêu cầu có khóa trong bảng
# là IP nguồn của khách hàng
http-yêu cầu theo dõi-sc0 src
# khách hàng đã vượt quá 20 yêu cầu trong 5 giây chưa?
acl vượt_rate_limit sc_http_req_rate(0) gt 20
# gắn cờ họ nếu họ vượt quá giới hạn
http-request sc-set-gpt0(0) 1 nếu vượt quá_rate_limit
# nếu họ vượt quá giới hạn 3 lần, hãy đánh dấu họ là người tăng tốc đã biết
acl known_speeder sc_get_gpc0(0) ge 3
# từ chối tất cả khách hàng vượt quá giới hạn hoặc được biết là người tăng tốc
yêu cầu http từ chối deny_status 429 nếu vượt quá_rate_limit || known_speeder
# đếm mỗi khi họ vượt quá giới hạn nếu họ bị gắn cờ
acl issue_speeding_ticket sc_get_gpt0(0) eq 1
http-request sc-inc-gpc0(0) nếu issue_speeding_ticket
# đặt lại cờ
http-yêu cầu sc-set-gpt0(0) 0
default_backend be_servers
Nếu từ chối yêu cầu http
sẽ dừng thực thi (như tôi nghĩ), thì trong hai trường hợp, điều này sẽ không hoạt động như dự định, phải không?
- Nếu máy khách đang gửi một lượng yêu cầu HTTP vượt quá giới hạn liên tục, acl
vượt_rate_limit
đánh giá là đúng vì vậy từ chối yêu cầu http
sẽ làm cho sc-inc-gpc0
không thể truy cập dòng và không có vé tăng tốc sẽ được phát hành.
- Nếu khách hàng vượt quá giới hạn tốc độ và sau đó dừng lại mãi mãi, sẽ không có giấy phạt quá tốc độ nào được cấp vì yêu cầu cuối cùng đã bị từ chối, tương tự như trường hợp trước.
- Nếu khách hàng vượt quá giới hạn tốc độ và sau đó giảm tốc độ để không vượt quá giới hạn nữa (và do đó có hành vi trở lại), giấy phạt chạy quá tốc độ sẽ được cấp. Đây là điều ngược lại với những gì tôi mong đợi sẽ xảy ra.
Nếu từ chối yêu cầu http
không dừng thực thi, thì sẽ rất mơ hồ về điều gì sẽ xảy ra với yêu cầu? Nếu khác thì sao yêu cầu http
trận đấu dòng; người cuối cùng sẽ thắng?
Bức tranh lớn hơn ở đây là tôi đang cố gắng hoàn thành điều gì đó tương tự như trường hợp sử dụng ví dụ.Tôi cần một bảng liệt kê số lần IP nguồn đạt đến giới hạn tốc độ (nhưng chỉ được tính một lần để duy trì trạng thái vượt quá giới hạn tốc độ).
Tôi không tìm thấy nguồn có thẩm quyền về thứ tự thực thi quy tắc trong tệp cấu hình haproxy trong tài liệu. Có lẽ tôi đang thiếu một cái gì đó.