Я использую следующий синтаксис для своего файла конфигурации Nginx /etc/nginx/nginx.conf
:
user www-data;
worker_processes 2;
pid /run/nginx.pid;
worker_rlimit_nofile 100000;
events {
worker_connections 2048;
multi_accept on;
}
http {
##
# Basic Settings
##
client_header_buffer_size 2k;
large_client_header_buffers 2 1k;
client_body_buffer_size 10M;
client_max_body_size 10M;
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=50r/s;
server {
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Блоки сервера моего веб-сайта включены в:include /etc/nginx/sites-enabled/*;
Будет ли сервер, определенный http
выше, заменять server{}
блоки в моем sites-enabled/*
, чтобы защита от DDOS работала так, как ожидается?
решение1
На самом деле есть важное различие междуДОСиДДОС-атакаатаки. Дополнительная буква D в DDOS означает распределенный.
Для простогоДОСатаки, которые ваша настройка может использовать. Однако это действительно зависит от вашего приложения или веб-сайта, где может быть разница между разрешенным или ожидаемым вариантом использования и не разрешенным или не ожидаемым вариантом использования. Не существует универсального рецепта.
Чтобы смягчитьДДОС-атакаатакует вашу установкуне поможет. Такие атаки будут производиться с множества разных IP-адресов. Обычно DDOS-атаки должны быть смягчены на сетевом уровне и с действительно высокой пропускной способностью.
решение2
Я предполагаю, что вы говорите оngx_http_limit_conn_moduleиngx_http_limit_req_module.
Синтаксис: limit_conn номер зоны;
По умолчанию: —
Контекст: http, сервер, местоположение
Эти директивы наследуются из предыдущего уровня конфигурации тогда и только тогда, когда на текущем уровне не определены директивы limit_conn.
Поэтому limit_conn
вам нужно поместить его на один уровень выше в http
блоке, чтобы он унаследовался в server
блоках.
Синтаксис: limit_req zone=name [burst=number] [nodelay | delay=number];
По умолчанию: —
Контекст: http, server, location
Эти директивы наследуются из предыдущего уровня конфигурации тогда и только тогда, когда на текущем уровне не определены директивы limit_req.
То же самое касается limit_req
размещения его на один уровень выше в http
блоке, чтобы сделать его унаследованным в server
блоке.