我想對我的網頁伺服器上允許的並發連接數設定限制。我在 iptables (v1.4.19.1) 核心 3.14.4-200.fc20.x86_64 上嘗試了以下規則,並為filter
表下的 INPUT 鏈設定了預設的 DROP 策略:
-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT
然後,我使用 apache benchmark 存取了具有 50 個並發連接的伺服器:
$ ab -kc 50 -t 10 http://mysite.com/
但是,當我查看伺服器存取日誌時,我仍然可以看到數百行成功的請求。我期待該connlimit
規則生效並斷開所有連接。我的規則或我對並發連接的解釋有問題嗎?
答案1
經過多次測試,我發現只有預設的丟棄策略是不夠的,
*filter
-F
-X
:INPUT DROP [0:0]
非常重要的是不要假設它會被遵循。只有connlimit
當你明確地在鏈的末尾新增刪除規則:
-A INPUT -j DROP
現在,即使並發數低於指定限制,它也能正常工作:
$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)
重要的是要測試。但不確定您是否會將其歸類為錯誤。