Chúng tôi có một dịch vụ web phía sau máy chủ HAProxy đang chạy trong bộ nhớ đệm proxy ngược cấu hình. Các máy chủ phụ trợ gửi Kiểm soát bộ đệm
các tiêu đề chính xác cho tất cả các phản hồi để HAProxy có thể lưu trữ tất cả các phản hồi theo thông số kỹ thuật HTTP.
Tuy nhiên, khi người dùng cuối nhấn nút Shift+Reload trong ví dụ: Google Chrome, ứng dụng khách (Chrome) gửi Pragma: không có bộ đệm
và Kiểm soát bộ đệm: không có bộ đệm
điều này buộc HAProxy phải luôn tìm nạp yêu cầu từ máy chủ phụ trợ. Rõ ràng, các cuộc tấn công DDoS có thể sử dụng thủ thuật tương tự này để dễ dàng gây thêm tải cho các máy chủ phụ trợ.
Vì chúng tôi biết rằng các tiêu đề bộ đệm là chính xác, làm cách nào chúng tôi có thể định cấu hình HAProxy để bỏ qua ứng dụng khách đã gửi Pragma: không có bộ đệm
và tránh gọi chương trình phụ trợ khi yêu cầu có thể được thực hiện trực tiếp từ bộ đệm HAProxy?
Tôi biết rằng việc bỏ qua tiêu đề này sẽ không ổn đối với việc sử dụng proxy chung, nhưng trong trường hợp này, chúng tôi kiểm soát cả proxy ngược và chương trình phụ trợ để chúng tôi biết điều này là ổn.
Đây là một ví dụ về phản hồi từ máy chủ phụ trợ sẽ được thực hiện lại từ phụ trợ khi máy khách gửi kiểm soát bộ đệm: không có bộ đệm
và pragma: không có bộ đệm
:
kiểm soát bộ đệm: công khai, tuổi tối đa=31536000, s-maxage=31536000
độ dài nội dung: 463
loại nội dung: image/svg+xml
ngày: Thứ năm, ngày 24 tháng 6 năm 2021 14:14:19 GMT
etag: "338"
hết hạn: Thứ Sáu, ngày 24 tháng 6 năm 2022 14:14:19 GMT
máy chủ: Apache
tùy chọn loại nội dung x: nosniff
Thật rõ ràng rằng Tổng cộng không cần tìm nạp lại cái này từ các máy chủ phụ trợ vì nó có giá trị trong một năm đối với bất kỳ người dùng nào sử dụng URL đã cho. Cũng đáng chú ý là Theo mặc định, NGINX không tôn trọng tiêu đề [client] Pragma.