Headers#

Позволяет выдавать поля заголовка Expires и Cache-Control, а также добавлять произвольные поля в заголовок ответа.

Пример конфигурации#

expires    24h;
expires    modified +24h;
expires    @24h;
expires    0;
expires    -1;
expires    epoch;
expires    $expires;
add_header Cache-Control private;

Директивы#

add_header#

Синтаксис

add_header имя значение [always];

По умолчанию

—

Контекст

http, server, location, if в location

Добавляет указанное поле в заголовок ответа при условии, что код ответа равен 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 или 308. В значении параметра можно использовать переменные.

Директив add_header может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы add_header.

Если указан параметр always, то поле заголовка будет добавлено независимо от кода ответа.

Если значение поля после подстановки переменных — пустая строка, поле не добавляется. Это позволяет добавлять поле в зависимости от условия:

map $request_uri $robots_tag {
    ~^/private/  "noindex, nofollow";
    default      "";
}

add_header X-Robots-Tag $robots_tag;

Для полей ETag и Last-Modified директива не добавляет второе поле: если такое поле в ответе уже есть (например, установлено при отдаче статического файла или получено от проксируемого сервера), директива заменяет его. Если значение — пустая строка, директива удаляет поле из ответа. Замена и удаление, как и добавление, выполняются с учетом кода ответа и параметра always.

Поле Content-Type директива обрабатывает так же. Если поле, полученное от проксируемого сервера либо от FastCGI-, uwsgi-, SCGI- или gRPC-сервера, содержит параметр charset, а в новом значении его нет, директива сохраняет эту кодировку: например, при замене text/html; charset=utf-8 на application/json получится application/json; charset=utf-8.

add_trailer#

Синтаксис

add_trailer имя значение [always];

По умолчанию

—

Контекст

http, server, location, if в location

Добавляет указанное поле в конец ответа при условии, что код ответа равен 200, 201, 206, 301, 302, 303, 307 или 308. В значении можно использовать переменные.

Директив add_trailer может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы add_trailer.

Если указан параметр always, то указанное поле будет добавлено независимо от кода ответа.

Если значение поля после подстановки переменных — пустая строка, поле не добавляется.

expires#

Синтаксис

expires [modified] время;

expires epoch | max | off;

По умолчанию

expires off;

Контекст

http, server, location, if в location

Разрешает или запрещает добавлять или менять поля Expires и Cache-Control в заголовке ответа при условии, что код ответа равен 200, 201, 204, 206, 301, 302, 303, 304, 307 или 308. В качестве параметра можно задать положительное или отрицательное время.

Время в поле Expires получается как сумма текущего времени и времени, заданного в директиве. Если используется параметр modified, то время получается как сумма времени модификации файла и времени, заданного в директиве.

Кроме того, с помощью префикса "@" можно задать время суток:

expires @15h30m;

Содержимое поля Cache-Control зависит от знака заданного времени:

  • отрицательное время — "Cache-Control: no-cache".

  • положительное или равное нулю время — "Cache-Control: max-age=`t`", где t это время в секундах, заданное в директиве.

epoch

задает время "Thu, 01 Jan 1970 00:00:01 GMT" (1 января 1970 00:00:01 GMT) для поля Expires и "no-cache" для поля Cache-Control.

max

задает время "Thu, 31 Dec 2037 23:55:55 GMT" (31 декабря 2037 23:55:55 GMT) для поля Expires и 10 лет для поля Cache-Control.

off

запрещает добавлять или менять поля Expires и Cache-Control в заголовке ответа.

В значении последнего параметра можно использовать переменные:

map $sent_http_content_type $expires {
    default         off;
    application/pdf 42d;
    ~image/         max;
}

expires $expires;