1. 程式人生 > 實用技巧 >nginx的location配置(二)

nginx的location配置(二)

nginx的location配置(二)

這一篇來記錄location中的正則匹配

1、舉例
1.1 配置舉例1

1)在/www/server/nginx/html/下,新建檔案image,該資料夾裡面放置圖片test.jpg

2)開啟/www/server/nginx/html/index.html,編輯

nginx的配置裡面新增:

1   location / {      #規則1
2        root html;
3        index index.html index.htm;
4   }
5 
6   location ~ image{ #規則2
7        root /var
/www/image/; 8 index index.html; 9 }

如果我們訪問http://test.php7.isee.wang/image/test.jpg,此時,“/”與“image/logo.png”也能匹配。那麼,最終是哪個規則在發揮作用呢?別急,我們一步一步來看

首先直接訪問:http://test.php7.isee.wang/

由上圖,我們看到,頁面上面新增的圖片並沒有顯示。

我們再直接訪問下圖片地址:http://test.php7.isee.wang/image/test.jpg

這個時候就需要檢視錯誤日誌:

執行命令:tail -f /www/wwwlogs/test.php7.isee.wang.error.log

分析:1) 從報錯資訊中,我們可以看到訪問圖片的地址通過nginx的location配置定位到規則2,但是沒有找到相應的目錄或者檔案。

2) 但是這裡有個問題是,這裡定位到/var/www/image/image/test.jpg,我們配置的root是/var/www/image/,按理說這個地方應該是定位到/var/www/image/test.jpg。於是將root對應的配置改為/var/www/,再訪問網址試試。

由上圖,可以看到圖片正常顯示出來啦

得出結果:普通匹配和正則匹配同時滿足的情況下,正則表示式將會被最終使用它會覆蓋其它普通的匹配規則

1.2 配置舉例2

 1     location / {
2 root html; 3 index index.html index.htm; 4 } 5 6 location /foo { 7 root /var/www/html; 8 index index.html index.htm; 9 } 10 11 location ~ image{ 12 root /var/www/image/; 13 index index.html; 14 }

我們訪問 http://test.php7.isee.wang/foo


分析:對於uri “/foo”,兩個location的patt,都能匹配他們。即 '/'能從左字首匹配 '/foo' '/foo'也能左字首匹配 '/foo',此時,真正訪問 /var/www/html/index.html

原因:'/foo'匹配得更長


location定位流程圖


正則匹配

總結:location的命中過程是這樣的
1:先判斷精準命中,如果命中,立即返回結果並結束解析過程
2:判斷普通命中,如果有多個命中,“記錄”下來“最長”的
命中結果(注意:記錄但不結束,最長的為準)
3:繼續判斷正則表示式的解析結果,按配置裡的正則表示式順序為準,
由上到下開始匹配,一旦匹配成功1個,立即返回結果,並結束解析過程。
延伸分析:a:普通命中,順序無所謂,是因為按照命中的長短來確定的。
b:正則命中,順序有所謂,因為是從前往後命中的。