在 try_files 指令中将命名位置作为后备

在 try_files 指令中将命名位置作为后备

我对 Nginx 中的路由处理有些困惑。

server {
    listen 80;
    listen [::]:80;
    server_name my_domain;

    root /var/www/ep;

    index index.html;

    error_page 403 404 /my403.html;

    location /images/ {
            try_files $uri @not_found;
    }

    location @not_found {
            root /var/www/ep/not_found;
            try_files NON_EXISTENT_1 /not_found.jpg;
    }
}

对于上述配置,当我访问http://我的域名/images/xyz.png或者http://我的域名/图片/我期望@not_found位置指令能够返回图像/var/www/ep/not_found/not_found.jpg(它存在),但不知何故/var/www/ep/not_found.jpg路径正在被尝试(它不存在)。结果显示/my403.html文件。

我想使用命名位置方法(@not_found)。

有人能解释一下这里发生了什么吗?

为何/var/www/ep/not_found/not_found.jpg沒有送達?

答案1

您将它放在语句/not_found.jpg的末尾try_files,使其成为 URI 术语,这意味着nginx将搜索新的 URIlocation来处理请求。您应该将其设置为不是最后例如:

try_files /not_found.jpg =404;

这个文件了解更多信息。


作为命名的替代方案location,您可以使用:

location /images/ {
        try_files $uri /not_found.jpg;
}
location = /not_found.jpg {
    root /var/www/ep/not_found;
}

这个文件了解详情。

相关内容