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 。 我不想复制粘贴@proxyconfiguration,因为会有更多的添加(caching)。 我也将有其他的目录,例如直接提供.well-known

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

1

你可以把你的代理configuration分开文件并include它。

proxy_conf

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

和你的configuration:

 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

使用假的不存在的path作为try_files的第一个参数:

 location / { try_files /NONEXISTENTFILE @proxy; }