![NGiNX 位置文件夹与位置正则表达式的缓存性能](https://linux22.com/image/761472/NGiNX%20%E4%BD%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8E%E4%BD%8D%E7%BD%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%BC%93%E5%AD%98%E6%80%A7%E8%83%BD.png)
我看到很多用于缓存文件的正则表达式示例,例如:
location ~* ^.+\.(?:css|js|jpeg|jpg|gif|ico|png|html|ttf|eot|woff|woff2|svg)$ {
add_header Cache-Control public,max-age=2592000,immutable;
access_log off;
tcp_nodelay off;
open_file_cache max=3000 inactive=120s;
open_file_cache_valid 45s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
}
然而,从了解 NGiNX 的工作原理来看,它似乎可以处理多很多倍的请求?
location /stufftocache/ {
add_header Cache-Control public,max-age=2592000,immutable;
access_log off;
tcp_nodelay off;
open_file_cache max=3000 inactive=120s;
open_file_cache_valid 45s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
}
然后将所有内容放入该文件夹中,这是真的吗?还是我不明白?我找不到任何提出这个问题的问题,也找不到任何说明这一点的例子,但正则表达式似乎要慢得多。
答案1
是的,正则表达式比较慢,特别是如果它们不是以最优方式构建的,这很容易......
例如,您的正则表达式可以写成:
location ~* \.(?:css|js|jpeg|jpg|gif|ico|png|html|ttf|eot|woff|woff2|svg)$
通过跳过行匹配的开始,它可以使速度更快一些。
关于实际问题,是的,前缀匹配更快。
但是,通常不推荐这样做,因为它限制了文件放置的位置,因此在将新文件添加到系统时,配置和保持配置最新变得更加困难。