我可以在try_files nginx指令中使用两个命名位置吗?

时间:2016-06-22 08:41:20

标签: nginx location

我想使用类似的东西:

location @a1 {
    ...
}

location @a2 {
    ...
}

location /path {
    try_files @a1 $uri @a2
}

是否可以,我应该在@ a1位置继续尝试使用$ uri / @ a2?

如果是这样,nginx将如何处理?

2 个答案:

答案 0 :(得分:5)

我找到了this solution

location /static/ {
    try_files $uri @static_svr1;
}
location @static_svr1{
    proxy_pass http://192.168.1.11$uri;
    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = @static_svr2;
}

location @static_svr2{
    proxy_pass http://192.168.1.12$uri;
    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = @static_svr3;
}

location @static_svr3{
    proxy_pass http://192.168.1.13$uri;
}

此示例的工作方式如下:

try_files $uri @static_svr1 @static_svr2 @static_svr3

答案 1 :(得分:1)

你不能,因为try_files只会将其 last 参数视为命名位置 - 在您的示例中,nginx将查找名为@a1的文件并忽略{{1}阻止。

try_files docs对此没有超级明确,只提到“最后一个参数也可以指向命名位置”。

This answer显示了一种使用error_page的变通方法,这对您来说可能是一种有用的方法(取决于您希望通过加入location @a1来做什么)。

More on try_files here