[英]Nginx how to whitelist location for rate limiting
我的 nginx.conf 中對主機和 IP 都有全局速率限制。 但是,有一個特定位置我想忽略這些限制,就像這樣。
limit_req_zone $binary_remote_addr zone=limitip:10m rate=10r/s;
limit_req_zone $host zone=limithost:10m rate=10r/s;
server {
limit_req zone=limitip burst=5 nodelay;
limit_req zone=limithost burst=5 nodelay;
location /whitelisted_location {
/* ignore the server limits */
}
}
創建兩個具有非常高價值的新區域並在該位置內使用它們的最佳方法是什么?
@agentshowers,您可能會在本主題中找到如何做到這一點的想法。
實際上,我們這樣做的方式如下:
# Defining which limit zone to use (per URL)
map $request_uri $pb_limit_req_zone {
"~^/files(/.*)?" "files";
"~^/secret/health-check$" "healthchecks";
default "common";
}
# Define the key per zone name
map $pb_limit_req_zone $limit_req_key_files {
default "";
"files" $binary_remote_addr;
}
map $pb_limit_req_zone $limit_req_key_common {
default "";
"common" $binary_remote_addr;
}
map $pb_limit_req_zone $limit_req_key_healthchecks {
default "";
"healthchecks" $binary_remote_addr;
}
# Defining the zones
limit_req_zone $limit_req_key_files zone=pb-frontend-files:20m rate=10r/s;
limit_req_zone $limit_req_key_common zone=pb-frontend-common:20m rate=25r/s;
limit_req_zone $limit_req_key_healthchecks zone=pb-frontend-healthchecks:20m rate=100r/s;
...
...
server {
...
location / {
# Rate Limit settings
limit_req_dry_run off;
limit_req zone=pb-frontend-files burst=1 delay=10;
limit_req zone=pb-frontend-common delay=10;
limit_req zone=pb-frontend-healthchecks burst=50 delay=10;
limit_req_status 429;
try_files $uri $uri/ /index.php?$query_string;
}
...
...
# Pass all .php files to a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
# Rate Limit settings
limit_req_dry_run off;
limit_req zone=pb-frontend-files burst=1 delay=10;
limit_req zone=pb-frontend-common delay=10;
limit_req zone=pb-frontend-healthchecks burst=50 delay=10;
limit_req_status 429;
...
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.