兩種實(shí)現(xiàn)方式分別是基于Ehcache和Redis的session管理策略。
大家都知道服務(wù)器資源有限的,但是客戶端來(lái)的請(qǐng)求是無(wú)限的(不排除惡意攻擊), 為了保證大部分的請(qǐng)求能夠正常響應(yīng),不得不放棄一些客戶端來(lái)的請(qǐng)求,所以我們會(huì)采用Nginx的限流操作, 這種操作可以很大程度上緩解服務(wù)器的壓力, 使其他正常的請(qǐng)求能夠得到正常響應(yīng)。
如何使用Nginx實(shí)現(xiàn)基本的限流,比如單個(gè)IP限制每秒訪問(wèn)100次。通過(guò)Nginx限流模塊,我們可以設(shè)置一旦并發(fā)連接數(shù)超過(guò)我們的設(shè)置,將返回503錯(cuò)誤給客戶端。這樣可以非常有效的防止CC攻擊。再配合 iptables防火墻,基本上CC攻擊就可以無(wú)視了。
如何使用
conf配置
配置503錯(cuò)誤
默認(rèn)情況,超出限制額度,將會(huì)報(bào)503錯(cuò)誤,提示:
這樣顯示沒(méi)毛病,但是不夠友好,這里我們自定義503錯(cuò)誤。
配置說(shuō)明
limit_conn_zone
是針對(duì)每個(gè)IP定義一個(gè)存儲(chǔ)session狀態(tài)的容器。這個(gè)示例中定義了一個(gè)100m的容器,按照32bytes/session,可以處理3200000個(gè)session。
limit_rate 300k;
對(duì)每個(gè)連接限速300k. 注意,這里是對(duì)連接限速,而不是對(duì)IP限速。如果一個(gè)IP允許兩個(gè)并發(fā)連接,那么這個(gè)IP就是限速limit_rate×2。
burst=5;
這相當(dāng)于在檢查站req旁邊放5個(gè)座位。如果某個(gè)請(qǐng)求當(dāng)時(shí)超過(guò)速度限制被攔了,請(qǐng)他在空座位上坐著,等排隊(duì),如果檢查站空了,就可以通過(guò)。如果連座位都坐滿了,那就抱歉了,請(qǐng)求直接退回,客戶端得到一個(gè)服務(wù)器忙的響應(yīng)。所以說(shuō)burst跟request_rate一點(diǎn)關(guān)系都沒(méi)有,設(shè)成10000,就是1萬(wàn)個(gè)請(qǐng)求可以等著排隊(duì),而檢查站還是1秒鐘放行5個(gè)請(qǐng)求(龜速)。而且也不能一直排隊(duì),所以nginx還設(shè)了超時(shí),排隊(duì)超過(guò)一定時(shí)間,也是直接退回,返回服務(wù)器忙的響應(yīng)。
以上配置Nginx需要配置以下模塊:
ngx_http_limit_conn_module (static)
ngx_http_limit_req_module (static)
執(zhí)行命令 nginx -V 就可以檢查到是否有安裝。
【責(zé)任編輯:張燕妮 TEL:(010)68476606】