try_files 与单个@location?

chx*_*chx 4 nginx

我从https://gist.github.com/mattd/1006398开始,现在我有了:

    root /data/example.com;
    location /sites/default/files/ {
            try_files $uri @proxy;
    }
    location / {
            try_files @proxy;
    }
    location @proxy {
            proxy_pass http://127.0.0.1:8088;
    }
Run Code Online (Sandbox Code Playgroud)

当然,这不是有效的语法。我怎样才能使这项工作?基本上,sites/default/files如果文件存在,我想直接提供文件,@proxy否则使用。其他目录应@proxy立即转到。我不想复制粘贴@proxy配置,因为那里会添加更多配置(缓存)。例如,我还将有其他应直接提供的目录.well-known

Ale*_*Ten 8

有几种方法可以解决这个问题:

1

您可以将代理配置放在单独的文件中include

proxy_conf

proxy_pass proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
# etc.....
Run Code Online (Sandbox Code Playgroud)

和你的配置:

location /sites/default/files/ {
   try_files $uri @proxy;
}
location / {
    include proxy_conf;
}
location @proxy {
    include proxy_conf;
}
Run Code Online (Sandbox Code Playgroud)

2

使用error_page指令:

location / {
    error_page 418 = @proxy;
    return 418;
}
Run Code Online (Sandbox Code Playgroud)

3

使用假的不存在的路径作为第一个参数try_files

location / {
    try_files /NONEXISTENTFILE @proxy;
}
Run Code Online (Sandbox Code Playgroud)