Tôi cần điều tiết kết nối/yêu cầu trong máy chủ NGINX cho cả yêu cầu http và http2. Tuy nhiên, điều chỉnh không được áp dụng cho các địa chỉ IP cụ thể của CDN (đã được phổ biến trong khối địa lý)
Tôi có cấu hình sau để điều tiết các yêu cầu http/http2 khi không có yêu cầu cụ thể về CDN.
bản đồ $http2 $http1connlimitkey {
mặc định "";
"" $binary_remote_addr;
}
bản đồ $http2 $http2connlimitkey {
mặc định $binary_remote_addr;
"""";
}
một trong hai http1connlimitkey
và http2connlimitkey
khóa được đặt thành nhị phân_remote_addr
tùy thuộc vào loại kết nối.
Bây giờ, bất kể loại kết nối nào, nếu kết nối được bắt nguồn từ CDN, tôi cần đặt các phím trên thành trống để thoát khỏi điều chỉnh kết nối.
Tôi đang làm theo cách tiếp cận được đưa ra trong giải pháp này Làm cách nào để giới hạn tỷ lệ trong nginx, nhưng bao gồm/không bao gồm một số địa chỉ IP nhất định? để ánh xạ nguồn gốc yêu cầu.
địa lý $danh sách trắng {
mặc định 0;
# CIDR trong danh sách bên dưới không giới hạn
1.2.3.0/24 1;
9.10.11.12/32 1;
}
bản đồ $whitelist $limit {
0 $binary_remote_addr;
1"";
}
Làm cách nào để đặt http1connlimitkey
và http2connlimitkey
để trống nếu yêu cầu đến từ CDN.
Một trong những cách tôi đang nghĩ là có bản đồ như bên dưới
bản đồ $ danh sách trắng $cdn {
0 ""
1 "CDN";
}
bản đồ "$cdn$http2" $http1connlimitkey {
"^CDN" ""
"" $binary_remote_addr;
mặc định "";
}
bản đồ "$cdn$http2" $http2connlimitkey {
"^CDN" ""
mặc định $binary_remote_addr;
"""";
}
Bất kỳ cách nào khác tốt hơn để xử lý tương tự.
Tôi cần thoát cả giới hạn http và http2 trong trường hợp yêu cầu bắt nguồn từ CDN.
Cảm ơn