簡體   English   中英

Nginx中的PCRE ^〜符號

[英]PCRE ^~ symbol in nginx

我有這個nginx位置塊(來自https://munin.readthedocs.io/en/2.0.8/example/webserver/nginx.html

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的 “斷言字符串(或多行模式下的行)的開始”,但我找不到〜的意思。

謝謝

不要在readthedocs.io上閱讀文檔。 有關全面的說明,請閱讀實際文檔。

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

我引用:

 Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location 

因此,這告訴我們^~location支持的運算符之一。

換句話說:這根本不是任何正則表達式的一部分,而是修飾符。

該文檔繼續:

為了找到與給定請求匹配的位置,nginx首先檢查使用前綴字符串定義的位置(前綴位置)。 其中,將選擇並記住具有最長匹配前綴的位置。 然后檢查正則表達式[...]

這意味着nginx會嘗試通過首先比較URL前綴來查找匹配項(這是很快的),如果失敗,則繼續嘗試正則表達式(這要慢得多)。

幾句話之后:

如果最長的匹配前綴位置具有“ ^〜”修飾符,則不檢查正則表達式。

因此,這意味着如果給定URL有候選匹配項,則可以利用^~防止nginx嘗試使用正則表達式來查找更好的匹配項。 這是性能優化。

所以,用簡單的英語

location ^~ /munin-cgi/munin-cgi-graph/ {
}

表示“所有位置均以/munin-cgi/munin-cgi-graph/開頭,不要費心尋找更好的匹配項”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM