location 語法php
location 有」定位」的意思, 根據Uri來進行不一樣的定位.html
在虛擬主機的配置中,是必不可少的,location能夠把網站的不一樣部分,定位到不一樣的處理方式上.nginx
好比, 碰到.php, 如何調用PHP解釋器? --這時就須要location正則表達式
location 的語法ide
location [=|~|~*|^~] patt {測試
}網站
中括號能夠不寫任何參數,此時稱爲通常匹配url
也能夠寫參數spa
所以,大類型能夠分爲3種server
location = patt {} [精準匹配]
location patt{} [通常匹配]
location ~ patt{} [正則匹配]
如何發揮做用?:
首先看有沒有精準匹配,若是有,則中止匹配過程.
location = patt {
config A
}
若是 $uri == patt,匹配成功,使用configA
location = / {
root /var/www/html/;
index index.htm index.html;
}
(=/精準匹配到/,可是,這是個目錄,index會去找文件,先找index.htm,沒有就找index.html。若是index.html也沒有,就走下一個location)
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
(先匹配精確匹配=/,不行再匹配/)
上面的配置分析:
若是訪問 http://xxx.com/
定位流程是
1: 精準匹配中 」/」 ,獲得index頁爲 index.htm
2: 再次訪問 /index.htm , 這次內部轉跳uri已是」/index.htm」 ,
根目錄爲/usr/local/nginx/html
3: 最終結果,訪問了 /usr/local/nginx/html/index.htm
上面的例子若是改一下,改爲準確到文件的精確訪問:
若訪問/,先去location =/,匹配/index.html,如有,就是/index.html,走location =/ index.html
再來看,正則也來參與.
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location ~ image {
root /var/www/image;
index index.html;
}
若是咱們訪問 http://xx.com/image/logo.png
此時, 「/」 與」/image/logo.png」 匹配
同時,」image」正則 與」image/logo.png」也能匹配,誰發揮做用?
正則表達式的成果將會使用.
圖片真正會訪問 /var/www/image/logo.png
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location /foo {
root /var/www/html;
index index.html;
}
咱們訪問 http://xxx.com/foo
對於uri 「/foo」, 兩個location的patt,都能匹配他們
即 ‘/’能從左前綴匹配 ‘/foo’, ‘/foo’也能左前綴匹配’/foo’,
此時, 真正訪問 /var/www/html/index.html
緣由:’/foo’匹配的更長,所以使用之.;
location [ = | ~ | ~* | ^~ ] uri { ... }
在一個server中location配置段可存在多個,用於實現從uri到文件系統的路徑映射;ngnix會根據用戶請求的URI來檢查定義的全部location,並找出一個最佳匹配,然後應用其配置;
=:對URI作精確匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html
location = / {
...
}
~:對URI作正則表達式模式匹配,區分字符大小寫;
~*:對URI作正則表達式模式匹配,不區分字符大小寫;
^~:對URI的左半部分作匹配檢查,不區分字符大小寫;
不帶符號:匹配起始於此uri的全部的url;
匹配優先級:=, ^~, ~/~*,不帶符號;
= 嚴格匹配。若是這個查詢匹配,那麼將中止搜索並當即處理此請求。
~ 爲區分大小寫匹配(可用正則表達式)
!~爲區分大小寫不匹配
~* 爲不區分大小寫匹配(可用正則表達式)
!~*爲不區分大小寫不匹配
^~ 若是把這個前綴用於一個常規字符串,那麼告訴nginx 若是路徑匹配那麼不測試正則表達式。
location ^~ /images/ {
# 匹配任何以 /images/ 開頭的任何查詢而且中止搜索。任何正則表達式將不會被測試。
}