Добрый день. Я использую nginx как раздающий сервер для кеширования небольших видеофайлов с другого сервера-хранилища. Среднее время получения одного файла из хранилища 20 мсек, максимальное 200 мсек. Если два клиента приходят к nginx за одним файлом практически одновременно, то nginx одного клиента ставит на загрузку файла из хранилища, а второй клиент попадает на ожидание lock_timeout/lock_age (https://github.com/nginx/nginx/blob/branches/stable-1.12/src/http/ngx_http_file_cache.c#L452). При этом ставится таймер, который каждые 500 мсек проверяет наличие файла в кеше. Получается, что время таймера сильно больше времени получения файла из хранилища. Уменьшать proxy_cache_lock_timeout нет возможности, так как можно перегрузить канал между nginx и хранилищем. Есть ли возможность обойти/уменьшить этот таймер, кроме как менять значение в сорцах и перекомпилировать nginx? Можно ли поставить что-то типа inotify ивента на появление/изменение файла в кеше?
Мой nginx.conf worker_processes 8; worker_cpu_affinity auto; events { worker_connections 32768; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; proxy_cache_path /storage/cache levels=1:2 keys_zone=ssd_cache:10m inactive=10m use_temp_path=off max_size=1G; proxy_http_version 1.1; upstream backend { server some_other_server:80 max_fails=0; keepalive 16; } server { listen 80; location ~ ^/($<fname>.+)\.mp4$ { proxy_pass http://backend; proxy_cache_key "$request_method|$fname"; proxy_cache ssd_cache; proxy_cache_revalidate on; proxy_set_header Connection ""; proxy_cache_lock on; proxy_cache_lock_timeout 300s; proxy_cache_lock_age 5s; proxy_cache_use_stale error timeout invalid_header updating; proxy_buffering on; } } } Posted at Nginx Forum: https://forum.nginx.org/read.php?21,278731,278731#msg-278731 _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru