基本文法: 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:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNjJWM2E2M2UmMmFDZwUDNxcTMlBjZlRTY3cjZ4QmNk9CXzIzLcRDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
通路:http://location.linuxds.com/login,将比對規則B:
通路:http://location.linuxds.com/static/test.html,将比對規則C:
通路:http://location.linuxds.com/static/files/test.txt,将比對規則D:
解釋:雖然也符合規則C,但基于最大比對原則,是以優先選擇規則D。
通路:http://location.linuxds.com/test.txt,将比對規則E:
解釋:雖然也符合規則F,但正則中基于順序優先,是以優先選擇規則E。
通路:http://location.linuxds.com/static/test.txt,将比對規則C:
解釋:雖然也符合規則F,但基于比對優先級^~ > ~,~*,是以優先選擇規則C。
通路:http://location.linuxds.com/test.TXT,将比對規則G:
解釋:規則E區分大小寫,規則F不區分大小寫,是以優先選擇規則F。
通路:http://location.linuxds.com/image/test.txt,将比對規則E:
解釋:雖然也符合規則Y,但基于正則比對優先,是以優選選擇規則E。
通路:http://location.linuxds.com/image/test.tiff,将比對規則G:
解釋:沒有更高優先級的其他規則(正則或=),是以比對規則G。
通路:http://location.linuxds.com/work/1234,将比對規則I:
解釋:如上除H之外所有規則都不比對,所有的位址都以 / 開頭,是以這條規則将作為最後比對規則。