如果文件不存在,则在 nginx 上进行内部重定向

如果文件不存在,则在 nginx 上进行内部重定向

我希望 /media/thumbnails 下的所有 URL 都从磁盘提供,如果文件不存在,则从另一台服务器提供,但不重定向客户端。我相信这应该可行,但我找不到它的问题所在:

    location /media/thumbnails {
            try_files $uri @thumbnail_generator;
    }

    location /media {
            root /home/plinio/nginx_test;
            break;
    }

    location @thumbnail_generator {
            proxy_pass http://127.0.0.1:8081/media_generate$uri;
    }

即使在创建 /home/plinio/nginx_test/media/thumbnails/test.txt 文件之后,对 /media/thumbnails/test.txt 的请求仍然在内部重定向到 @thumbnail_generator。

答案1

您还没有向我们展示完整的 vhost 配置,所以我不能肯定地说,但是您在位置块中使用该root指令/media表明您可能没有root在顶级 vhost 配置中的指令。

Nginxlocation不是累积的;它发现最佳单场比赛 locationblock(根据文档中指定的规则),并使用它。因此,如果您在 vhost 配置本身中没有该 block,那么您的查找/media/thumbnails/text.txt将不会到达您认为的文件系统上的位置,因此文件不存在,并且内部重定向将启动。

顺便说一句,您可以通过打开调试日志记录并查看 vhost 错误日志来轻松找到这些问题。Nginx 在记录处理请求的操作方面做得相当好,而完全错误的文件路径通常是您做错事的重要线索。

相关内容