gpt4 book ai didi

django - 使用 nginx 反向代理 + gunicorn 的 Django 应用程序防止 DDOS 攻击

转载 作者:行者123 更新时间:2023-12-04 23:18:03 26 4
gpt4 key购买 nike

我正在编写一个 Django 应用程序,它使用 nginx 反向代理 + gunicorn 作为生产中的网络服务器。

我想包括阻止来自某个 IP(或 IP 池)的 DDOS 攻击的功能。这是在 nginx 级别,而不是在代码中更深层次。我需要 Web 应用程序防火墙吗?如果是这样,我该如何整合它。

我的项目位于 sites-available 的 nginx 文件有:

server {
listen 80;
charset utf-8;
underscores_in_headers on;
location = /favicon.ico { access_log off; log_not_found off; }

location /static/ {

root /home/sarahm/djangoproject/djangoapp;
}

location /static/admin {

root /home/sarahm/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/admin/static/;
}

location / {
proxy_pass_request_headers on;
proxy_buffering on;
proxy_buffers 8 24k;
proxy_buffer_size 2k;
include proxy_params;
proxy_pass http://unix:/home/sarahm/djangoproject/djangoapp/djangoapp.sock;
}


error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/sarahm/djangoproject/djangoapp/templates/;
}
}

让我知道我是否应该包含更多信息,以及这些信息应该是什么。

最佳答案

如果您想阻止某些 IP 甚至子网访问您的应用程序,请将以下代码添加到您的 server堵塞:

#Specify adresses that are not allowed to access your server
deny 192.168.1.1/24;
deny 192.168.2.1/24;
allow all;

此外,如果您不使用 REST,那么您可能希望通过将以下内容添加到您的 server 来限制可能的 HTTP 动词。堵塞:
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 403;
}

为了减少 DoS 攻击的可能性,您可能希望通过将以下内容添加到 NGINX nginx.conf 来限制来自单个主机的可能请求的数量(参见 http://nginx.org/en/docs/stream/ngx_stream_limit_conn_module.html) :
limit_conn_zone $binary_remote_addr zone=limitzone:1M;

并将以下内容发送到您的 server堵塞:
limit_conn limitzone  20;
nginx.conf 的其他一些有用设置,如果设置正确,这有助于缓解 DoS:
server_tokens off;
autoindex off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 10;
keepalive_timeout 20 15;

open_file_cache max=5000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

由于在这里解释这些内容过于宽泛,建议您查看文档 http://nginx.org/en/docs/详情。虽然选择正确的值是通过对特定设置的反复试验来实现的。

Django 将错误页面本身作为模板提供,因此您应该删除:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/sarahm/djangoproject/djangoapp/templates/;

添加 access_log off; log_not_found off;static如果您真的不关心日志记录也是一种选择:
location /static/ {
access_log off;
log_not_found off;
root /home/sarahm/djangoproject/djangoapp;
}

这将降低文件系统请求的频率,从而提高性能。

NGINX 是一个很棒的 Web 服务器,设置它是一个广泛的话题,所以最好要么阅读文档(至少 HOW-TO 部分),要么找到一篇文章来描述与你的情况相近的设置。

关于django - 使用 nginx 反向代理 + gunicorn 的 Django 应用程序防止 DDOS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com