Код состояния в директиве nginx try_files

Можно ли использовать текущий код состояния в качестве параметра в try_files?

Например, мы пытаемся предоставить специфический для хоста 503 статический ответ или откат для всего сервера, если он не был найден:

error_page 503 @error503;

location @error503 {
    root /path_to_static_root/;
    try_files /$host/503.html /503.html =503;
}

Существует несколько таких директив, поэтому было бы удобно сделать что-то вроде:

error_page 404 @error
error_page 500 @error
error_page 503 @error

location @error {
    root /path_to_static_root/;
    try_files /$host/$status.html /$status.html =$status;
}

Но документация по переменным не перечисляет ничего, что мы могли бы использовать для этого.

Возможно ли это, или есть альтернативный способ сделать это?

1 ответ

Ваши примеры имеют бесконечный цикл.

Возможно, вы хотите что-то вроде этого:

error_page 404 @error404;
error_page 500 @error500;
error_page 503 @error503;

location @error404 {
    root /path_to_static_root/;
    try_files /$host/404.html /404.html =404;
}

location @error500 {
    root /path_to_static_root/;
    try_files /$host/500.html /500.html =500;
}

location @error503 {
    root /path_to_static_root/;
    try_files /$host/503.html /503.html =503;
}

... и это будет работать быстрее, чем с переменными.

Часто задаваемые вопросы по NGINX: существует ли правильный способ использования переменных nginx, чтобы сделать разделы конфигурации короче, используя их в качестве макросов, чтобы части конфигурации работали в качестве шаблонов?

Обновить:

Вики сообщества не является документацией. Из официальной документации:

$status - статус ответа (1.3.2, 1.2.2)

@ http://nginx.org/en/docs/http/ngx_http_core_module.html

Другие вопросы по тегам