使用try_files进行nginx缓存检查

时间:2016-10-02 01:23:14

标签: caching nginx lua

我有一个写入缓存目录的图像服务器(它目前只在url请求中使用相同的路径)。我已经确认在初始请求中(即缓存中没有任何内容),但是在以下请求中写入了一个新文件,try_files无法成功找到该文件。

我的nginx.conf是:

http {
    server {
        listen 8080;
        # serve tiles if not in the cache
        location @image_server {
          content_by_lua_file "/Users/tim/work/chickpea/serve_image.lua";
        }

        # capture tile request e.g. /tile/l8/091080/rgb/20160924/10/938/597.jpg
        # regex named capture groups for each param
        location ~ ^/tile/(?<layer>[^/]+)/(?<pathrow>[^/]+)/(?<type>[^/]+)/(?<date>[^/]+)/(?<z>[^/]+)/(?<x>[^/]+)/(?<y>[^.]+) {
          root cache;
          set $cachepath "cache/$layer/$pathrow/$type/$date/$z/$x/$y.jpg";
          try_files $cachepath @image_server;
          add_header X-Static hit;
        }

        ..

我已确认,在/tile/l8/091080/rgb/20160924/10/938/597.jpg的请求中,$cachepathcache/l8/091080/rgb/20160924/10/938/597.jpg597.jpg位于正确的路径中。我已尝试使用带有和不带前导cache/的$ cachepath,但似乎都没有。

1 个答案:

答案 0 :(得分:2)

完成这项工作需要进行两项更改:

  1. root指令设为绝对路径,否则有效/usr/local/nginx/cache

  2. $cachepath变量添加前导斜杠。将根指令值和$cachepath附加在一起以确定完整的文件路径。