Nginx try_files 在服务器块内不起作用

Nginx try_files 在服务器块内不起作用
    http {
    include mime.types;
    default_type application/octet-stream;


    server {
        root /websites;
        listen 80;
        server_name localhost;

        # don't work
        try_files /logo.png /logo.jpg /error;

        # works
        rewrite ^/e /error;

        # works
        # return 200 "$request_uri Handled by server block";

        location / {
            default_type text/plain;
            return 200 "Root prefix matched";
        }

        location /error {
            default_type text/plain;
            return 404 "Logo not found";
        }

    }
}

我想知道这个评估的原因是什么,我在文档和论坛上都找不到任何可靠的解释。

顺便说一下,我曾尝试过以下场景:

  • 删除location / {}块后,它按预期工作。我知道当向服务器发出请求时,它首先按服务器块进行评估,然后按匹配的位置块进行评估。但似乎try_files指令被忽略了(为什么?!!)。如果我没记错的话,try_files指令的最后一个参数会重写 URI,因此它应该表现得像rewrite指令一样。rewritereturn指令都按预期工作,无论是否有位置块匹配,它们每次都会进行评估。

我进行了大量研究,想找到可靠的信息来解释这种情况,但没找到。所以我在这里向了解 Nginx 内部原理的人寻求答案或来源。

相关内容