2017-06-29 15 views
0

我有這樣的nginx位置塊(從https://munin.readthedocs.io/en/2.0.8/example/webserver/nginx.htmlPCRE ^〜符號中的nginx

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開始的字符串(或行,多行模式)」,但我找不到的含義。

感謝

+0

[同樣的問題在ServerFault](https://serverfault.com/questions/674425/what-does-location-mean-in-an-nginx-location-block)。 –

回答

1

不要閱讀文檔在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的第一檢查位置處使用該前綴字符串(前綴位置)定義。其中,選擇並記住具有最長匹配前綴的位置。然後檢查正則表達式[012]

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

幾句話後:

如果最長前綴匹配的位置有「^〜」修飾符,然後正則表達式不檢查。

因此,這意味着,如果有一個給定的URL的候選匹配,那麼你可以利用^~防止從nginx的嘗​​試正則表達式找到一個更好比賽。這是一個性能優化。

所以,用簡單的英語

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

意味着「的所有位置開始/munin-cgi/munin-cgi-graph/,而不用費心尋找更好的匹配」