我试图限制来自IP的请求数量,以防我收到太多请求。
例如:如果我每分钟会得到超过50个请求,我想阻止它 IP 5分钟。
当我使用request.META['REMOTE_ADDR']
时,我总是得到本地主机的IP而不是发送请求的IP。
答案 0 :(得分:4)
django-ratelimite会限制您在指定时间内收到的请求数量。
pip install django-ratelimit
from ratelimit.decorators import ratelimit
@ratelimit(key='ip', rate='10/m')
def myview(request):
...
答案 1 :(得分:0)
1.我如何获得发送请求的计算机的IP?
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
>>>get_client_ip(request)
"client ip"
2.我可以如何限制该IP不发送更多的X时间请求?
我认为您可以为此类型设置middleware
。比如在数据库中保存请求时间,将相邻请求与之前的请求进行比较等等。
更新自评论
如果您使用nginx作为Web服务器,请尝试此操作 http://nginx.org/en/docs/http/ngx_http_limit_req_module.html