immutable

Директива `immutable` задаёт поведение кэширования для статических ресурсов, позволяя использовать атрибут `immutable` заголовка `Cache-Control` для повышения производительности.

Синтаксисimmutable on | off;
По умолчаниюoff
Контекстhttp, server, location
Аргументыflag

Описание

Директива immutable в NGINX используется для улучшения стратегий кэширования статических ресурсов, особенно в веб-фреймворках, которые реализуют подход «cache-busting» с использованием версионированных URL. Когда эта директива включена, сервер отвечает на запросы статических ресурсов HTTP-заголовками, которые содержат директиву Cache-Control, установленную в immutable, а также заголовок Expires с далёкой датой истечения. Это сообщает браузеру и промежуточным кэшам, что ресурс не изменится, и поэтому его можно эффективно кэшировать без необходимости повторной валидации при каждом запросе.

Директива immutable может применяться в нескольких контекстах, включая http, server и location, и принимает один аргумент-флаг, который может включать или отключать директиву. При установке immutable on; NGINX настроит ответы так, чтобы они содержали как директиву max-age (установленную на 1 год), так и атрибут immutable, что позволяет более полно использовать кэшированный контент. Директива также обеспечивает передачу заголовка Expires только для запросов HTTP/1.0, поскольку более новые версии HTTP более эффективно управляют кэшированием с помощью Cache-Control.

Отмечая ресурсы как immutable, NGINX позволяет браузерам кэшировать их на неограниченный срок, что оптимизирует доставку статического контента. Это особенно полезно для таких приложений, как одностраничные приложения (SPA), и для фреймворков, которые часто обновляют свои ресурсы, не изменяя их URL. Дополнительно значения stale-while-revalidate и stale-if-error могут быть добавлены в заголовок Cache-Control, чтобы смягчить промахи кэша в определённых условиях работы браузера, делая механику кэширования ещё более надёжной.

Пример конфига

http {
    server {
        location /static/ {
            immutable on;
        }
    }
}

Убедитесь, что базовые статические ресурсы действительно не меняются, поскольку пометка их как immutable может привести к выдаче устаревшего контента, если они обновляются без изменения URL. Также следует проверить поддержку директивы immutable в браузерах, так как поведение может различаться между ними. Обратите внимание, что старые браузеры могут не понимать директиву immutable, в результате будут применяться запасные (fallback) механизмы.

Если используется в сочетании с другими директивами кэширования, убедитесь, что они не конфликтуют с immutable, чтобы избежать неожиданных проблем с кэшированием.

← Ко всем директивам