Nginx:limit_conn 与上游 max_conns(在位置上下文中)
Nginx: limit_conn vs upstream max_conns (in location context)
环境:Nginx 1.14.0(有关详细信息,请参阅 dockerfile)。
限制特定位置的并发连接数
在服务器中,可以使用两种方法 - limit_conn (third example for all ips)
和 upstream max_conns.
这两种方法的工作方式有区别吗?
有人可以解释或参考解释吗?
使用上游限制的例子max_conns:
http {
upstream foo{
zone upstream_foo 32m;
server some-ip:8080 max_conns=100;
}
server {
listen 80;
server_name localhost;
location /some_path {
proxy_pass http://foo/some_path;
return 429;
}
}
}
限制使用 limit_conn:
http {
limit_conn_zone $server_name zone=perserver:32m;
server {
listen 80;
server_name localhost;
location /some_path {
proxy_pass http://some-ip:8080/some_path;
limit_conn perserver 100;
limit_conn_status 429;
}
}
}
upstream max_conns
是从 nginx
服务器到上游代理服务器的连接数。 max_conns
更重要的是确保后端服务器不会过载。假设您有 5 个 nginx
可以发送到的上游服务器。可能其中一个功率不足,因此您限制了它的连接总数以防止它过载。
limit_conn
是从客户端到 nginx
服务器的连接数,用于限制对 nginx
服务器的请求的滥用。例如,对于某个位置,您可以说一个 IP 在达到最大值之前只能有 10 个打开的连接。
另请注意,如果已达到 max_conns
限制,则可以将请求放在 queue 中进行进一步处理,前提是 queue
(NGINX Plus) 指令还包括设置队列中可以同时存在的最大请求数:
upstream backend {
server backend1.example.com max_conns=3;
server backend2.example.com;
queue 100 timeout=70;
}
如果queue
被请求填满或者在可选超时参数指定的timeout
期间无法选择上游服务器,或者省略队列参数,客户端收到错误(502)。
环境:Nginx 1.14.0(有关详细信息,请参阅 dockerfile)。
限制特定位置的并发连接数
在服务器中,可以使用两种方法 - limit_conn (third example for all ips)
和 upstream max_conns.
这两种方法的工作方式有区别吗?
有人可以解释或参考解释吗?
使用上游限制的例子max_conns:
http {
upstream foo{
zone upstream_foo 32m;
server some-ip:8080 max_conns=100;
}
server {
listen 80;
server_name localhost;
location /some_path {
proxy_pass http://foo/some_path;
return 429;
}
}
}
限制使用 limit_conn:
http {
limit_conn_zone $server_name zone=perserver:32m;
server {
listen 80;
server_name localhost;
location /some_path {
proxy_pass http://some-ip:8080/some_path;
limit_conn perserver 100;
limit_conn_status 429;
}
}
}
upstream max_conns
是从 nginx
服务器到上游代理服务器的连接数。 max_conns
更重要的是确保后端服务器不会过载。假设您有 5 个 nginx
可以发送到的上游服务器。可能其中一个功率不足,因此您限制了它的连接总数以防止它过载。
limit_conn
是从客户端到 nginx
服务器的连接数,用于限制对 nginx
服务器的请求的滥用。例如,对于某个位置,您可以说一个 IP 在达到最大值之前只能有 10 个打开的连接。
另请注意,如果已达到 max_conns
限制,则可以将请求放在 queue 中进行进一步处理,前提是 queue
(NGINX Plus) 指令还包括设置队列中可以同时存在的最大请求数:
upstream backend {
server backend1.example.com max_conns=3;
server backend2.example.com;
queue 100 timeout=70;
}
如果queue
被请求填满或者在可选超时参数指定的timeout
期间无法选择上游服务器,或者省略队列参数,客户端收到错误(502)。