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