是否可以使用当前状态代码作为参数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