Nginx区域(限制连接区域或限制请求区域)是否可以独立应用于多个位置,或者它们是否冲突?
假设我有两个服务,Nginx区域(限制连接区域或限制请求区域)是否可以独立应用于多个位置,或者它们是否冲突?,nginx,Nginx,假设我有两个服务,foo和bar,它们运行在同一台服务器上,Nginx作为这两个服务的反向代理。我预计foo的流量比bar的流量要多得多,请求频率也更高,我希望配置连接限制和速率限制来反映这一点。d 你能解释一下这两种配置如何有不同的行为吗? 请记住,限制使内存大小变得微不足道。。。我更关心的是与foo的连接是否会影响bar的限制,反之亦然(例如:如果同一ip有5个与foo的连接,1个与bar的连接,而与bar的连接被拒绝?) 对 第二种配置满足您的需求 传入的HTTP请求首先与位置匹配,然后在
foo
和bar
,它们运行在同一台服务器上,Nginx作为这两个服务的反向代理。我预计foo
的流量比bar
的流量要多得多,请求频率也更高,我希望配置连接限制和速率限制来反映这一点。d
你能解释一下这两种配置如何有不同的行为吗?
请记住,限制使内存大小变得微不足道。。。我更关心的是与foo的连接是否会影响bar的限制,反之亦然(例如:如果同一ip有5个与foo的连接,1个与bar的连接,而与bar的连接被拒绝?)
对
第二种配置满足您的需求 传入的HTTP请求首先与位置匹配,然后在
访问阶段
通过限制区域名称将统计数据(每个服务器名称、每个远程地址)相加,然后进入内容阶段
。因此,如果您将相同的限制区域放在两个不同的位置,由于限制区域名称相同,Nginx无法区分您想要限制的API(位置),结果是两个位置的统计信息合并为一个以检查限制
http {
limit_conn_zone $binary_remote_addr zone=foobar_ip:1m;
limit_conn_zone $server_name zone=foobar_server:1m;
limit_req_zone $binary_remote_addr zone=foobar_ip_req_limit:1m rate=10r/s;
server {
location /foo/api {
limit_conn foobar_ip 20;
limit_conn foobar_server 2000;
limit_req foobar_ip_req_limit burst=5 nodelay;
...
}
location /bar/api {
limit_conn foobar_ip 5;
limit_conn foobar_server 200;
limit_req foobar_ip_req_limit burst=5 nodelay;
...
}
...
}
...
}
http {
limit_conn_zone $binary_remote_addr zone=foo_ip:1m;
limit_conn_zone $server_name zone=foo_server:1m;
limit_req_zone $binary_remote_addr zone=foo_ip_req_limit:1m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=bar_ip:1m;
limit_conn_zone $server_name zone=bar_server:1m;
limit_req_zone $binary_remote_addr zone=bar_ip_req_limit:1m rate=10r/s;
server {
location /foo/api {
limit_conn foo_ip 20;
limit_conn foo_server 2000;
limit_req foo_ip_req_limit burst=5 nodelay;
...
}
location /bar/api {
limit_conn bar_ip 5;
limit_conn bar_server 200;
limit_req bar_ip_req_limit burst=5 nodelay;
...
}
...
}
...
}