nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享
django項(xiàng)目遭遇cc攻擊,不要驚慌,這里推薦兩招簡(jiǎn)單實(shí)用的技巧。
項(xiàng)目Nginx作為http接入層,分發(fā)到django應(yīng)用,啟動(dòng)10個(gè)uwsgi worker。
今日突然發(fā)現(xiàn),網(wǎng)頁(yè)打開卡頓,打開server一看,cpu100%。

打開uwsgi的log,發(fā)現(xiàn)某一個(gè)IP進(jìn)行了大量的請(qǐng)求,占用了worker。
這里總結(jié)下兩種解決方法:
1.設(shè)置nginx黑名單
vi blockip.conf創(chuàng)建文件,輸入:
deny x.x.x.x;
編輯nginx.conf, 在http{}內(nèi)添加:
include blockip.conf;
驗(yàn)證配置:
[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中注冊(cè):
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里再也沒有對(duì)方的IP出現(xiàn),相信對(duì)方正在某個(gè)小黑屋的電腦前氣得跺腳吧
以上這篇nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python numpy二維數(shù)組如何刪除指定行和列
本文展示了如何對(duì)數(shù)組進(jìn)行行列刪除操作,包括刪除單行、單列、多行和多列的方法,通過具體的運(yùn)行結(jié)果展示,讀者可以清晰地了解到如何在不同情況下進(jìn)行數(shù)據(jù)處理,文章內(nèi)容實(shí)用,適合需要進(jìn)行數(shù)據(jù)處理的讀者參考學(xué)習(xí)2024-09-09
OpenCV基于ORB算法實(shí)現(xiàn)角點(diǎn)檢測(cè)
這篇文章主要為大家詳細(xì)介紹了OpenCV基于ORB算法實(shí)現(xiàn)角點(diǎn)檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
python生成以及打開json、csv和txt文件的實(shí)例
今天小編就為大家分享一篇python生成以及打開json、csv和txt文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python利用腳本輕松實(shí)現(xiàn)ssh免密登陸配置
這篇文章主要為大家詳細(xì)介紹了python如何利用腳本輕松實(shí)現(xiàn)ssh免密登陸配置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12

