try_files без open_file_cache¶
Идентификатор проверки Gixy: try_files_is_evil_too
Директива try_files часто используется в nginx для проверки существования файла перед переходом к другим вариантам. Однако без open_file_cache каждый запрос вызывает множество системных вызовов stat(), что может значительно снизить производительность.
Почему это важно¶
Для каждого запроса try_files выполняет проверки существования файлов с помощью системных вызовов stat(). Без кэширования:
- Высокие накладные расходы на I/O: Каждый запрос вызывает множество дисковых операций
- Снижение производительности: Под нагрузкой это становится узким местом
- Увеличенная задержка: Особенно на сетевых файловых системах (NFS, распределённое хранилище)
Плохой пример¶
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
Каждый запрос будет выполнять 2-3 вызова stat() без какого-либо кэширования.
Хороший пример¶
# Включите файловый кэш на уровне http или server
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
С open_file_cache nginx кэширует метаданные файлов, значительно сокращая количество вызовов stat().
Параметры конфигурации кэша¶
| Директива | Описание |
|---|---|
open_file_cache max=N inactive=T |
Кэшировать до N записей, истекает после T неактивности |
open_file_cache_valid T |
Как часто проверять валидность кэшированных записей |
open_file_cache_min_uses N |
Минимум обращений перед кэшированием |
open_file_cache_errors on |
Кэшировать также ошибки «файл не найден» |
Когда отключить эту проверку¶
Если вы обслуживаете динамический контент, где файлы часто меняются, или используете RAM-диск, влияние на производительность может быть незначительным. Вы можете отключить эту конкретную проверку в конфигурации gixy.
Ссылки¶
Укрепляйте NGINX с поддерживаемыми RPM
Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.