我有配置
location ~ \.(pdf)$ {
expires 2h;
}
location / {
...backend rules...
}
现在我希望仅对真正存在的 pdf 执行第一个块,否则请求将被传递到后端。我想我应该在第一个位置块中添加try_files $uri @backend
:
location ~ \.(pdf)$ {
try_files $uri @backend;
expires 2h;
}
location / {
...backend rules...
}
location @backend {
...same backend rules...
}
但事实证明,这两个位置/
都@backend
将完全相同,有没有办法将它们组合起来,或者我应该只制作两个相同的块?
作为一种解决方法,您可以缩短
location
到这将为每个请求产生一个额外的系统
stat
调用,但由于它将是您的 Web 根目录,因此stat
这些调用应该由内核进行某种缓存,并且不会对性能造成严重影响。附言
您的正则表达式位置不需要捕获组,就
location ~ \.pdf$ { ... }
足够了(但性能略高)。更新
还有一项可以减少位置数量的建议: