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