今天小編在羣裏閒扯,有幾位小夥伴就提到了 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 zone number;
默認值:
上下文: 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