@kachi88

Как правильно настроить файловый сервер nginx?

Есть дедик с 32 гб озу и 1гб портом и с ним проблема в том, что он используется как файловый сервер по http протоколу, т.е пользователь просто нажимает на ссылку server.com/file.exe и скачивает файл. Но он намертво зависает когда с него скачивают одновременно 20-30 чел. Нашел в интернете настройки, работает сейчас с ними. Если без них, то вообще максимум 10 одновременных скачиваний. Настройки:

sendfile                          on;
    tcp_nopush                      on;
    tcp_nodelay                     on;
    client_header_buffer_size       1k;
    client_body_buffer_size         2k;
    client_max_body_size            500m;
    large_client_header_buffers     4 8k;
    send_timeout                    10;
    keepalive_timeout               20 20;
    reset_timedout_connection       on;
    server_tokens                   off;
    server_name_in_redirect         off;
    server_names_hash_max_size      512;
    server_names_hash_bucket_size   512;
    open_file_cache max=20000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;


Подскажите пожалуйста, что нужно пофиксить, добавить, чтобы увеличить количество подключенных юзеров?
  • Вопрос задан
  • 992 просмотра
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
https://docs.nginx.com/nginx/admin-guide/web-serve...
Возможно проблемы на уровне ОС, настройте по этому руководству
Ответ написан
Комментировать
@Neostar1989
Как при этом показатели ресурсов? Посмотри использование HDD в первую очередь (I/o delay). Если используется httpS протокол (ssl), то шифрование может ложить cpu, если там какой-то atom. Смотри показатели под нагрузкой.
Ответ написан
1. Посмотреть сколько Ядер CPU. Если что увеличить количество worker_processes и worker_connections
Как оказалось при большом количестве скачиваний файлов производительность увеличивается если увеличить worker_processes. Auto не особо помогает. Но без фанатизма. Для 32 ядер ставлю 96
worker_processes.
2.
multi_accept on;
accept_mutex off;
use epoll;
3.
directio в зависимости от размеров файлов нужно подбирать.
4.
thread_pool больше 128 не вижу смысла моем случае
5. Комбо. Если софт рейд ничего не делать. Если железный рейд с ссд или hdd, или просто ссд или просто hdd сменить io scheduler с bfq на noop
С bfq даже железный рейд 0 на 50 Тб с кучей дисков умирает. Io поднимается выше 3 сек.

Это все для Ubuntu 18.04.
Поколдовав с этими настройками можно полностью использовать серв на 10 Gbit/s с кешем файлов на 28 Тб. И io при записи не больше 10 мс и 4000 активных подключений
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы