【问题标题】:Getting Nginx to serve static files from several sources让 Nginx 从多个来源提供静态文件
【发布时间】:2012-08-29 16:11:43
【问题描述】:

我有一个 Nginx 配置,可以正常工作并正确提供静态文件:

location /static/ {
    alias /tmp/static/;
    expires 30d;
    access_log off;
}

但是我现在要做的是,如果/tmp/static中不存在静态文件,Nginx会在/srv/www/site/static中查找该文件。我不知道如何实现,我用try_files 尝试了一些东西,但我不知道如何正确使用它。

【问题讨论】:

    标签: nginx static-files


    【解决方案1】:

    您可以使用带有“root”的命名位置来处理一系列后备位置。请注意,您不能在命名位置内使用“别名”。

    location / {
        root /path/to/primary/html;
        try_files $uri $uri/ @fallback;
    }
    location @fallback {
        root /path/to/secondary/html;
        try_files $uri $uri/ =404;
    }
    

    【讨论】:

      【解决方案2】:

      以下应该可以解决问题:

      location /static/ {
        expires 30d;
        access_log off;
        try_files tmp/static/$uri tmp/static/$uri/ tmp/static2/$uri tmp/static2/$uri/;
      }
      

      有关 try_files 使用的文档和示例,请参阅 http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

      【讨论】:

        【解决方案3】:

        您可以将根设置为您要使用的两个路径的公共前缀(在本例中为 /),然后只需在 try_files 参数中指定其余路径:

        location /static/ {
          root /;
          try_files /tmp$uri /srv/www/site$uri =404;
          expires 30d;
          access_log off;
        }
        

        在某个位置使用 root / 可能看起来令人不安,但 try_files 将确保不会提供 /tmp/static 或 /srv/www/site/static 之外的文件。

        【讨论】:

        • 由于某种原因,它不适用于 $uri,当我使用 $request_uri 时它可以,知道为什么吗?
        • $request_uri 从请求行扩展为原始的、未处理的 uri 路径。它不受任何内部重定向的影响。 $uri 是当前正在处理的 uri 路径,它由内部重定向更改。我猜你在某种程度上是在内部重定向,这导致了你的问题。
        【解决方案4】:

        使用SlowFS Cache Module 似乎可以满足您的需求。它将您的静态内容缓存在一个临时目录中,该目录可能存储在更快的磁盘上,并为您管理回退。

        【讨论】:

          猜你喜欢
          • 2018-05-17
          • 2019-07-01
          • 2018-10-23
          • 1970-01-01
          • 2019-05-31
          • 2021-09-03
          • 2018-05-18
          • 2015-07-30
          • 2021-12-02
          相关资源
          最近更新 更多