【问题标题】:Nginx image not found fallbackNginx 镜像未找到后备
【发布时间】:2019-07-20 05:43:03
【问题描述】:

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

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

谁能给出一个示例配置?

非常感谢! :)

【问题讨论】:

  • 这些文件是否在同一个目录中? URI 是否基于非_大文件的名称?
  • @RichardSmith 是的,同一个目录,例如:/image/test/dog.jpg, /image/test/dog_large.jpg, /image/test/cat.jpg, /image/test /cat_large.jpg、/image/test/bird.jpg,但没有 /image/test/bird_large.jpg。谢谢:)

标签: nginx replace http-status-code-404 fallback


【解决方案1】:

您可以使用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 $1_large.$2 $1.$2 =404;
}

如果存在,该块将返回大变体,如果存在则返回常规变体,如果都不存在则返回 404 状态。

正则表达式location块的顺序很重要,因为第一个匹配正则表达式的块用于处理请求。详情请见this document。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多