Nginx指令限制\u连接不工作

Nginx指令限制\u连接不工作,nginx,Nginx,我无法使nginx limit\u conn指令正常工作 我有以下nginx配置: http { limit_conn_zone $binary_remote_addr zone=per_ip:10m; proxy_cache_path /var/nginx/cache/ levels=1:2 keys_zone=caching:10m max_size=10g inactive=525600m use_temp_path=off; server { li

我无法使nginx limit\u conn指令正常工作

我有以下nginx配置:

http {
    limit_conn_zone $binary_remote_addr zone=per_ip:10m;
    proxy_cache_path /var/nginx/cache/ levels=1:2 keys_zone=caching:10m max_size=10g inactive=525600m use_temp_path=off;
    server {
        listen 80;
        expires -1;
        limit_conn per_ip 1;
        limit_conn_status 403;
        location ~ / {
            proxy_pass http://upstream;
            proxy_cache caching;
        }
    }
}
如果我使用以下python脚本查询服务器,我希望第二个请求将返回403响应

import httplib

headers = {'Connection': 'keep-alive'}

conn1 = httplib.HTTPConnection('nginx-server')
conn1.request('GET', '/path/to/resource', '', headers)
res1 = conn1.getresponse()
print(res1.status)

conn2 = httplib.HTTPConnection('nginx-server')
conn2.request('GET', '/path/to/resource', '', headers)
res2 = conn2.getresponse()
# Should print 403 but most often it prints 200
print(res2.status)

conn1.close()
conn2.close()
第二个请求的响应状态代码不一致。有时返回200,有时返回403

也许我误解了limit_conn指令的含义,现在我希望第二个请求总是返回403


nginx版本:nginx/1.11.9

我认为您的设置正常。我认为有时会得到200,有时会得到403的原因是,有时在第二个请求运行时,第一个请求已经完成,使得nginx服务器再次没有连接

我想到的一件事是通过睡觉来提出一个很长的请求。对于nginx,您可以使用
echo\u sleep
睡眠几秒钟

location ~ / {
    echo_sleep 1.234; 
    proxy_pass http://upstream;
    proxy_cache caching;
}

希望它能解决您的问题。

当第二个连接发出请求时,第一个连接没有关闭。我确信这一点(与wireshark核实)。可能只有在执行实际工作时,连接才起作用,但我在任何地方都找不到记录。但这一指令的目的是什么?DDOS攻击会使服务器充满无用的连接。