Nginx 始终无法使用带有 try_files 的 $server_name 解析路径

Nginx 始终无法使用带有 try_files 的 $server_name 解析路径

作为反向代理服务器的一部分,我有以下位置配置:

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参 数。 请参阅这个文件了解更多信息。

相关内容