nginx try_files 指令中的状态代码

Ham*_*ish 5 nginx

是否可以将当前状态代码用作 中的参数try_files

例如,我们尝试提供特定于主机的 503 静态响应,或者如果未找到则提供服务器范围的回退:

error_page 503 @error503;

location @error503 {
    root /path_to_static_root/;
    try_files /$host/503.html /503.html =503;
}
Run Code Online (Sandbox Code Playgroud)

有许多这样的指令,因此执行以下操作会很方便:

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;
}
Run Code Online (Sandbox Code Playgroud)

但是变量文档没有列出我们可以用来做这件事的任何东西。

是否有可能,或者是否有其他方法可以做到这一点?

VBa*_*art 3

你的例子有无限循环。

也许,你想要这样的东西:

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;
}
Run Code Online (Sandbox Code Playgroud)

..它会比使用变量运行得更快。

NGINX 常见问题解答:是否有正确的方法来使用 nginx 变量来缩短配置部分,将它们用作宏以使部分配置作为模板工作?

更新:

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

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

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