open_file_cache
Тема дорожной карты · Nginx
Директива open_file_cache указывает Nginx кэшировать метаданные об открытых файловых дескрипторах, поиске в директориях и ошибках поиска файлов в памяти, резко сокращая число системных вызовов при высокопроизводительной отдаче статических файлов. Конфигурация open_file_cache max=1000 inactive=20s указывает Nginx кэшировать до 1000 элементов и вытеснять записи, к которым не обращались в течение 20 секунд, тогда как open_file_cache_valid 30s задаёт частоту повторной проверки кэшированных записей относительно файловой системы. Директива open_file_cache_min_uses устанавливает минимальное число обращений в течение периода неактивности, после которого Nginx добавляет файл в кэш, предотвращая вытеснение часто используемых файлов редко запрашиваемыми. При высокопроизводительной отдаче статических файлов open_file_cache работает совместно с sendfile on и tcp_nopush on, минимизируя переключения контекста ядра и максимизируя пропускную способность веб-сервера Nginx. Правильная настройка open_file_cache — одна из наиболее эффективных низкоуровневых оптимизаций производительности в Nginx, особенно на серверах, доставляющих большие объёмы небольших статических ресурсов — CSS, JavaScript и изображений.
Как это работает
open_file_cache начинается с: worker_processes auto, worker_connections 4096 (или больше), worker_rlimit_nofile 65536, multi_accept on, use epoll, sendfile on, tcp_nopush on, tcp_nodelay on. Keepalive на клиентской стороне (keepalive_timeout 65) и к upstream (upstream { keepalive 32; }). Тюньте буферы (client_body_buffer_size, client_max_body_size, proxy_buffer_size). Профайл через nginx_amplify или Lua-tracing.
Когда применять
Тюньте после замеров — не копируйте случайные sysctl + nginx.conf-заклинания из интернета. Дефолты разумны для умеренного трафика. Поднимайте при конкретных боттлнеках (исчерпаны worker connections, file descriptors, upstream-таймауты). nginx -V — для compile-flags; nginx -T — для дампа эффективного полного конфига.
Типичные ошибки
Ловушки open_file_cache: worker_connections 100000 без поднятия OS-лимита файловых дескрипторов (ulimit -n) — nginx упирается в OS-лимит; тюнинг tcp_nopush для streaming-ответов (задерживает их); buffer-настройки cargo-cult из CDN-конфига nginx без понимания (трата RAM). Меряйте, меняйте по одной ручке.