nginx黑名單和django限速,最簡單的防惡意請求方法分享
django項目遭遇cc攻擊,不要驚慌,這里推薦兩招簡單實用的技巧。
項目Nginx作為http接入層,分發(fā)到django應(yīng)用,啟動10個uwsgi worker。
今日突然發(fā)現(xiàn),網(wǎng)頁打開卡頓,打開server一看,cpu100%。
打開uwsgi的log,發(fā)現(xiàn)某一個IP進(jìn)行了大量的請求,占用了worker。
這里總結(jié)下兩種解決方法:
1.設(shè)置nginx黑名單
vi blockip.conf創(chuàng)建文件,輸入:
deny x.x.x.x;
編輯nginx.conf, 在http{}內(nèi)添加:
include blockip.conf;
驗證配置:
[root@server nginx]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重啟nginx:
nginx -s reload
2.django內(nèi)添加middleware
RequestBlockingMiddleware.py
import time from django.core.exceptions import PermissionDenied from django.utils.deprecation import MiddlewareMixin MAX_REQUEST_PER_SECOND=2 #每秒訪問次數(shù) class RequestBlockingMiddleware(MiddlewareMixin): def process_request(self,request): now=time.time() request_queue = request.session.get('request_queue',[]) if len(request_queue) < MAX_REQUEST_PER_SECOND: request_queue.append(now) request.session['request_queue']=request_queue else: time0=request_queue[0] if (now-time0)<1: raise PermissionDenied('Forbidden user agent') request_queue.append(time.time()) request.session['request_queue']=request_queue[1:]
setting.py中注冊:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'common.middleware.RequestBlockingMiddleware', #在sessions之后,auth之前 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
不足100行代碼,log里再也沒有對方的IP出現(xiàn),相信對方正在某個小黑屋的電腦前氣得跺腳吧
以上這篇nginx黑名單和django限速,最簡單的防惡意請求方法分享就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python+Matplotlib實現(xiàn)直方圖的繪制
Matplotlib是Python的繪圖庫,它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制直方圖,感興趣的朋友可以學(xué)習(xí)一下2022-04-04Python入門教程(三十九)Python的NumPy安裝與入門
這篇文章主要介紹了Python入門教程(三十九)Python的NumPy安裝與入門,NumPy 是一個Python包,它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫,,需要的朋友可以參考下2023-05-05Python tensorflow實現(xiàn)mnist手寫數(shù)字識別示例【非卷積與卷積實現(xiàn)】
這篇文章主要介紹了Python tensorflow實現(xiàn)mnist手寫數(shù)字識別,結(jié)合實例形式分析了基于tensorflow模塊使用非卷積與卷積算法實現(xiàn)手寫數(shù)字識別的具體操作技巧,需要的朋友可以參考下2019-12-12python 定義類時,實現(xiàn)內(nèi)部方法的互相調(diào)用
今天小編就為大家分享一篇python 定義類時,實現(xiàn)內(nèi)部方法的互相調(diào)用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12關(guān)于Python兩個列表進(jìn)行全組合操作的三種方式
這篇文章主要介紹了關(guān)于Python兩個列表進(jìn)行全組合操作的三種方式,兩個元組 (a, b)(c, d),則它們的組合有 a,c a,d b,c b,d,這就叫全組合,需要的朋友可以參考下2023-04-04Python 的 __str__ 和 __repr__ 方法對比
這篇文章主要介紹了Python 的 __str__ 和 __repr__ 方法的相關(guān)資料,幫助大家區(qū)分__str__ 和 __repr__ ,感興趣的朋友可以了解下2020-09-09