
今天小編在羣裏閒扯,有幾位小夥伴就提到了 CC 攻擊,正好 www.weixiaoduo.com 也很久沒更新了,藉此水一篇教程~大多數新人在初期建站時使用的都是虛擬主機,環境都是由 IDC 預先配置好的,所以,遇到小規模的 CC 攻擊也許感覺不到什麼,但是由於是虛擬主機的可定製性太差了,正好建站一段時間,網站也漸漸有了起色,流量也多,換個小內存 vps 用用也挺爽的,谷歌百度一下找個教程依葫蘆畫瓢把 VPS 環境一裝好就屁顛屁顛的給網站搬家了。可是沒過幾天,卻發現訪問網站頻繁的出錯、訪問超時、甚至無法訪問,頓時就覺得被 IDC 坑了,立馬找客服理論去。結果 IDC 直接調出網站日誌,留下一句 「網站被 CC 了」 就再也不答理你了。哈哈~貌似撤的有點多啊,不過當年小編還在讀高一的時候,自己建立的第一個網站就是這樣被毀了的,所以嘮嗑有點多啊,直接步入正題:
nginx 下防 cc 方法, 利用 ngx_http_limit_conn_module 模塊限制連接數:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
| 語法: | limit_conn |
| 默認值: | — |
| 上下文: | http, server, location |
指定一塊已經設定的共享內存空間,以及每個給定鍵值的最大連接數。當連接數超過最大連接數時,服務器將會返回 503 (Service Temporarily Unavailable) 錯誤。比如,如下配置
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
表示,同一 IP 同一時間只允許有一個連接,具體參考 nginx 官方幫助文檔:http://nginx.org/cn/docs/http/ngx_http_limit_conn_module.html
WordPress 防 cc 代碼:
//防止 CC 攻擊
session_start(); //開啓 session
$timestamp = time();
$ll_nowtime = $timestamp ;
//判斷 session 是否存在 如果存在從 session 取值,如果不存在進行初始化賦值
if ($_SESSION){
$ll_lasttime = $_SESSION['ll_lasttime'];
$ll_times = $_SESSION['ll_times'] + 1;
$_SESSION['ll_times'] = $ll_times;
}else{
$ll_lasttime = $ll_nowtime;
$ll_times = 1;
$_SESSION['ll_times'] = $ll_times;
$_SESSION['ll_lasttime'] = $ll_lasttime;
}
//現在時間-開始登錄時間 來進行判斷 如果登錄頻繁 跳轉 否則對 session 進行賦值
if(($ll_nowtime - $ll_lasttime) < 3){
if ($ll_times>=5){
header("location:http://127.0.0.1");
exit;
}
}else{
$ll_times = 0;
$_SESSION['ll_lasttime'] = $ll_nowtime;
$_SESSION['ll_times'] = $ll_times;
}
以上代碼直接丟到主題的 functions.php 文件即可。 (PS:以上代碼來自 90blog)