Nginx指令限制\u连接不工作
我无法使nginx limit\u conn指令正常工作 我有以下nginx配置: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
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攻击会使服务器充满无用的连接。