天天看點

附001.Nginx location文法規則

基本文法: location [=|~|~*|^~]/uri/{...}

修飾符釋義:

對請求的url序列化。例如,對%xx等字元進行解碼,去除url中多個相連的/,解析url中的.,..等。這一步是比對的前置工作。

location有兩種表示形式,一種是使用字首字元,一種是使用帶~或~*修飾符的正則。

其相應的比對過程如下:

如果找到了精确比對的location,也就是使用了=修飾符的location,結束查找,使用它的配置。

所有剩下的正常字元串,采用最長比對;

繼續判斷正規表達式的解析結果,按配置裡的正規表達式順序為準,由上至下開始比對,一旦比對成功1個,立即傳回結果,并結束解析過程。

如果第3條規則産生比對的話,結果被使用。否則,使用第2條規則的結果。

注意:普通命中順序無所謂,是因為按命中的長短來确定。正則命中,順序有所謂,因為是從前入往後命中的。

基于以上的比對過程,我們可以得到以下兩點啟示:

使用正則定義的location在配置檔案中出現的順序很重要。因為找到第一個比對的正則後,查找就停止了,後續定義的比對(不管精度如何)都不再進行查找。

使用精确比對可以提高查找的速度。例如經常請求/的話,可以使用=來定義location。

由location比對規則可知,其比對優先級為:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/) 。

通路:http://location.linuxds.com/,将比對規則A:

附001.Nginx location文法規則

通路:http://location.linuxds.com/login,将比對規則B:

附001.Nginx location文法規則

通路:http://location.linuxds.com/static/test.html,将比對規則C:

附001.Nginx location文法規則

通路:http://location.linuxds.com/static/files/test.txt,将比對規則D:

附001.Nginx location文法規則

解釋:雖然也符合規則C,但基于最大比對原則,是以優先選擇規則D。

通路:http://location.linuxds.com/test.txt,将比對規則E:

附001.Nginx location文法規則

解釋:雖然也符合規則F,但正則中基于順序優先,是以優先選擇規則E。

通路:http://location.linuxds.com/static/test.txt,将比對規則C:

附001.Nginx location文法規則

解釋:雖然也符合規則F,但基于比對優先級^~ > ~,~*,是以優先選擇規則C。

通路:http://location.linuxds.com/test.TXT,将比對規則G:

附001.Nginx location文法規則

解釋:規則E區分大小寫,規則F不區分大小寫,是以優先選擇規則F。

通路:http://location.linuxds.com/image/test.txt,将比對規則E:

附001.Nginx location文法規則

解釋:雖然也符合規則Y,但基于正則比對優先,是以優選選擇規則E。

通路:http://location.linuxds.com/image/test.tiff,将比對規則G:

附001.Nginx location文法規則

解釋:沒有更高優先級的其他規則(正則或=),是以比對規則G。

通路:http://location.linuxds.com/work/1234,将比對規則I:

附001.Nginx location文法規則

解釋:如上除H之外所有規則都不比對,所有的位址都以 / 開頭,是以這條規則将作為最後比對規則。

繼續閱讀