Если у вас нет очень популярного сайта, но для начала или для нового сайта есть несколько настроек, для которых установлено слишком высокое значение. Вы всегда можете настроить его позже, после того как сайт заработает.
1) worker_rlimit_nofile 102400
Не уверен, сколько памяти имеет ваш сервер, но я думаю, что это слишком большое число, я бы предложил установить что-то вроде:
worker_rlimit_nofile 8192;
2) worker_connections 100000
Обычно конфигурирует worker_processes и worker_connections в зависимости от количества процессоров / ядер, содержимого и нагрузки. Формула имеет вид max_clients / second = worker_processes * worker_connections. Значение worker_connections
не должно быть равным 100000; Значение Nginx по умолчанию составляет только 1024
, если у вас есть 4 ядра ЦП, число клиентов, которое может быть обработано, будет 1024 x 4 = 4096 клиентов / секунду.
Я бы также предложил добавить multi_accept on;
, который информирует каждый рабочий_процесс о принятии всех новых подключений за раз, вместо того, чтобы принимать одно новое подключение за раз.
events {
worker_connections 1024;
multi_accept on;
}
3) Размер тела и заголовка клиента
Одной из рекомендаций по предотвращению медленной http-атаки является установка достаточно малых client_max_body_size
, client_body_buffer_size
, client_header_buffer_size
, large_client_header_buffers
и увеличение при необходимости. Но я думаю, что вы могли бы установить эти директивы слишком низкими, чтобы они влияли на производительность сервера, я бы порекомендовал просто использовать значения по умолчанию, рекомендованные базовым модулем Nginx http на данный момент.
client_header_buffer_size 1k;
client_body_buffer_size 16k; # 8k for 32-bit or 16k for 64-bit platform
client_max_body_size 1m;
large_client_header_buffers 4 8k;
Кстати, все основные настройки должны быть заключены в директиву http
, чтобы она распространялась на весь трафик http. Я также рекомендовал бы установить access_log on
, поскольку очень полезно лучше понимать трафик (и атаки) на ранней стадии развертывания сервера.
http {
access_log off;
autoindex off;
# other settings
.....
upstream backend {
server 127.0.0.1:8080 max_conns=150;
}
}