作为反向代理服务器的一部分,我有以下位置配置:
error_page 503 502 @down;
location @down {
try_files /error/test/$server_name.html /error/test/generic.html;
internal;
}
location /error/ {
root /usr/share/nginx/html/;
internal;
}
/usr/share/nginx/html/error/test/events.example.com.html
对于 server_name 为 events.example.com 的服务器块,如果存在,我希望能够提供服务。否则 Nginx 应该提供服务/usr/share/nginx/html/error/test/generic.html
。
Nginx 总是显示该generic.html
页面,即使存在更具体的页面。我认为可能是变量没有被评估,所以我$server_name.html
在错误目录中创建了一个名为的文件。问题仍然存在。如果我将 try_files 行更改为
index /error/test/$server_name.html
配置按预期工作。
如果第一个文件不存在,如何让 Nginx 根据 $server_name 变量解析文件并回退到通用文件?
答案1
遇到该语句时,您的root
语句不在范围内try_files
。因此nginx
无法确定文件的正确路径。
此外,try_files
还将处理文件同一个内的术语location
,因此您可以将两个位置合并为一个命名的位置location
(假设location /error/ { ... }
其他地方不需要)。
例如:
error_page 503 502 @down;
location @down {
root /usr/share/nginx/html/;
try_files /error/test/$server_name.html /error/test/generic.html =404;
}
添加=404
以便第二个参数被视为文件参数而不是URI参 数。 请参阅这个文件了解更多信息。