try_files总是返回404变量

时间:2017-05-19 19:12:25

标签: nginx

try_files指令似乎总是对我失败:

...

root /images;

location /media {
    set $do_resize $uri;
    # if ?resize=blah query present, rewrites do_resize to small/$uri
    if ($arg_resize != '') {
        set $do_resize 'small/${do_resize}';
    }
    try_files $do_resize $do_resize/ @fallback;
}

# placeholder for image resize server
location @fallback {
    add_header Content-Type text/html;
    return 200 "not found :/";
}

我的文件夹结构:

| images
    | test.jpeg
    | small
        test.jpeg

请求http://foo/media/test.jpeg时,它会正确返回图像。但是在请求http://foo/media/test.jpeg?resize=blah时,它返回404未找到。它应该返回test.jpeg文件夹中的small图像。

是否可以try_files使用自定义变量?除了$uri以外,我从未见过try_files指令以外的其他内容。

1 个答案:

答案 0 :(得分:1)

由于某种原因,if语句在location块中无效,但已知在if块内使用location会导致问题。见this application note

此外,所有nginx URI都以前导/开头。因此,$do_resize块中的if应为/small$uri

例如:

set $do_resize $uri;
if ($arg_resize != '') {
    set $do_resize /small$uri;
}

location /media {
    try_files $do_resize $do_resize/ @fallback;
}