LINUX.ORG.RU

nginx + оптимальная конфигурация для раздачи статики

 , ,


0

5

Всем доброго времени суток.

Итак вводная - нужно раздавать статику. centos 6.9 final, 4 ядра, какой-то объём свободной памяти. сборка nginx-а.

nginx version: nginx/1.13.8
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Конфиг ресурса:
proxy_cache_path /dev/shm/nginx levels=1:2 keys_zone=static_cache:320m inactive=320m max_size=500M;
proxy_cache_min_uses 1;

server {
        listen 80;
        server_name static.host.com;;

        location / {
                proxy_cache static_cache;
                proxy_cache_valid 200 1y;
                proxy_set_header Host nocache.static.host.com;
                proxy_pass http://127.0.0.1;
                access_log off;
        }
}

server {
        listen 80;
        server_name nocache.static.host.com;

        location / {
                allow 127.0.0.1;
                deny all;
                root /home/user/sites/static.host.com/htdocs;
                access_log off;
                error_log /dev/null crit;
        }
}
Конфиг головы:
worker_processes 4;
events {
        use epoll;
        worker_connections 4096;
        multi_accept on;
}
http {
...
        sendfile            on;
        sendfile_max_chunk 512k;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
        open_file_cache max=200000 inactive=20s;
        open_file_cache_valid 30s;
        keepalive_requests 100;
        reset_timedout_connection on;
        client_body_timeout 10;
        send_timeout 2;
...
}
Сам характер статики таков - около трети файлов около 2Кб, около 50% в районе 500Кб но меньше 512; остаток около 1Мб.

/dev/shm - это диск в памяти. Я рассуждаю так - фронт при получении запроса обращается либо в свой кеш, либо к бэкэнду; Канал на выдачу гарантированные 300Мбит/с; канал откуда ведётся тест - порядка 100Мбит/с, свободен при тесте ( 50 параллельных запросов ); но почему-то при тестовом заборе файлика размером 250Кб - я получаю максимальную скорость его отдачи около 1с, хотя ожидаю что-то не более чем 0.1с. Статику будут забирать в 20-30 параллельных коннектов, клиентов может прийти больше одного, сейчас меня это немного пугает ( клиент это unity-приложение ). Проблемой занялся, т.к. у разработчиков unity-приложения прогрузилась лишь половина изображений при тестовом пуске, кивают на меня.


Так, для статистики (не думаю, что решит проблему): если завернуть proxy_pass в сокет, числа на бенчмарке как-то изменятся?

anonymous
()
Ответ на: тишина от rumos

это лучше в admin наверное...

для начала надо убрать это error_log /dev/null crit;

разработчики nginx не рекомендуют класть кеши/статику в оперативную память тк это дурь, file cache os отработает значительно лучше.

далее, характер данных не ясен, жмутся/нежмутся, рабочий объем какой

Канал на выдачу гарантированные 300Мбит/с; канал откуда ведётся тест - порядка 100Мбит/с, свободен при тесте ( 50 параллельных запросов )

что говорит iperf3 ( 50 параллельных запросов )?

что говорит wrk ( 50 параллельных запросов )?

ты понимаешь для чего это sendfile_max_chunk 512k; ?

также https://thoughts.t37.net/nginx-optimization-understanding-sendfile-tcp-nodela...

drsm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.