nginx try_files 指令中的状态代码

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 变量来缩短配置的各个部分,并将它们用作宏以使配置的各个部分作为模板工作?

更新:

社区 wiki 不是文档。来自官方文档:

$status - 响应状态(1.3.2、1.2.2)

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

相关内容