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;
            ...
        }
        ...
    }
    ...
}