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:正則命中,順序有所謂,因為是從前往後命中的。