找不到 Nginx 图像回退

Nginx image not found fallback

我的网站有很多图片 /image/test/manyfile.jpg 现在我有 /image/test/manyfile_large.jpg,但不是所有的 .jpg 都有 _large.jpg.

所以我的想法是使用Nginx检查manyfile_large.jpg文件,如果不存在则重写或重定向到manyfile.jpg

任何人都可以给出示例配置吗?

非常感谢! :)

您可以使用try_files 来测试一个或多个文件是否存在。有关详细信息,请参阅 this document

首先您需要捕获 URI 的组成部分,以便您可以构造两个文件名变体来尝试。

我不确定您的问题和评论中的示例是 URI 还是路径名。在以下示例中,URI 为 /image/foo/bar.jpg,相应的文件位于 /path/to/image/foo/bar.jpg 和(可选)/path/to/image/foo/bar_large.jpg.

例如:

location ~ ^(/image/.+)\.(jpg|png|svg)$ {
    root /path/to;

    try_files _large. . =404;
}

该块将 return 大变体(如果存在),然后是常规变体(如果存在),然后是 404 状态(如果两者都不存在)。

正则表达式 location 块的顺序很重要,因为具有匹配正则表达式的第一个块用于处理请求。有关详细信息,请参阅 this document