1
我无法获得nginx的limit_conn指令正常工作。Nginx指令limit_conn无效
我有以下nginx的configuraton:
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
当第二个连接发出请求时,第一个连接未关闭。这,我确信(用wireshark检查)。这可能是一个连接只在执行实际工作时才算,但我无法在任何地方找到它。但是这个指令的目的是什么呢? DDOS攻击然后可以用无用的连接填充服务器。 – olif