发布
社区首页 >问答首页 >nginx中的PCRE ^~符号

nginx中的PCRE ^~符号
EN

Stack Overflow用户
提问于 2017-06-29 14:48:27
回答 1查看 1.1K关注 0票数 0

我有这个nginx定位块(来自https://munin.readthedocs.io/en/2.0.8/example/webserver/nginx.html )

代码语言:javascript
代码运行次数:0
复制
location ^~ /munin-cgi/munin-cgi-graph/ {
    fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
    include fastcgi_params;
}

看来nginx正在使用PCRE。^的意思是从http://www.pcre.org/original/doc/html/pcrepattern.html中“断言字符串的开始(或多行模式下的行)”,但是我找不到~的意思。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-29 15:17:38

不要只读readthedocs.io的文档。要获得全面的解释,请阅读实际的文档。

module.html#location

我引述如下:

语法: location =而外:-上下文:服务器,位置

这告诉我们,^~location支持的操作符之一。

换句话说:这根本不是任何正则表达式的一部分,它是一个修饰符。

这些文件继续下去:

为了找到匹配给定请求的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,对匹配前缀最长的位置进行选择和记忆。然后检查正则表达式..。

这意味着nginx试图通过比较URL前缀(速度很快)来找到匹配项,如果失败,则继续尝试正则表达式(这要慢得多)。

几句话之后:

如果最长匹配前缀位置有“^~”修饰符,则不检查正则表达式。

因此,这意味着如果给定的URL有候选匹配,那么您可以利用^~来阻止nginx尝试正则表达式来找到更好的匹配。这是一个性能优化。

所以,用简单的英语

代码语言:javascript
代码运行次数:0
复制
location ^~ /munin-cgi/munin-cgi-graph/ {
}

意思是“所有的位置开始/munin-cgi/munin-cgi-graph/__,不要费心寻找更好的匹配”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44828433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档