try_files 只有一个@location?

try_files 只有一个@location?

我从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;
    }

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

答案1

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

1

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

proxy_conf

proxy_pass proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
# etc.....

和您的配置:

location /sites/default/files/ {
   try_files $uri @proxy;
}
location / {
    include proxy_conf;
}
location @proxy {
    include proxy_conf;
}

2

使用error_page指令:

location / {
    error_page 418 = @proxy;
    return 418;
}

3

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

location / {
    try_files /NONEXISTENTFILE @proxy;
}

相关内容