Nginx location php
location指令的做用是根據用戶請求的URI來執行不一樣的應用。URI即統一資源標識符(Uniform Resource Identifier),就是根據用戶請求的網站地址URL進行匹配,匹配成功即進行相關的操做。 css
一、語法規則 html
1.1.前綴+uri [=|~|~*|^~] /uri/ { … } nginx
1.2.普通用法 location @name { ... } web
前綴含義 正則表達式
= 開頭表示精確匹配 後端
^~ 開頭表示uri以某個常規字符串開頭,理解爲匹配 url路徑便可 tomcat
~* 開頭表示不區分大小寫的正則匹配 服務器
~ 開頭表示區分大小寫的正則匹配(大小寫敏感) 框架
/ 通用匹配,任何請求都會匹配到
注意:無符號和^~不能同時存在
二、location優先級
在nginx的location和配置中location的順序沒有太大關係。正location表達式的類型有關。相同類型的表達式,字符串長的會優先匹配
優先級排序:
"="大於"完整路徑"大於"^~"大於"~*"大於"~"
分別經過加註釋和取消註釋來測試優先級
三、location正則用法
參考:http://www.javashuo.com/article/p-qusigjmv-gg.html
location = / {
# 精確匹配 / ,主機名後面不能帶任何字符串
[ configuration A ]
}
location / {
# 由於全部的地址都以 / 開頭,因此這條規則將匹配到全部請求
# 可是正則和最長字符串會優先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 開頭的地址,匹配符合之後,還要繼續往下搜索
# 只有後面的正則表達式沒有匹配到時,這一條纔會採用這一條
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 開頭的地址,匹配符合之後,還要繼續往下搜索
# 只有後面的正則表達式沒有匹配到時,這一條纔會採用這一條
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開頭的地址,匹配符合之後,中止往下搜索正則,採用這一條。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配全部以 gif,jpg或jpeg 結尾的請求
# 然而,全部請求 /images/ 下的圖片會被 config D 處理,由於 ^~ 到達不了這一條正則
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,繼續往下,會發現 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最長字符匹配到 /images/abc,繼續往下,會發現 ^~ 存在
# F與G的放置順序是沒有關係的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 纔有效:先最長匹配 config G 開頭的地址,繼續往下搜索,匹配到這一條正則,採用
[ configuration H ]
}
location ~* /js/.*/\.js {
匹配站點根目錄/js/目錄後面以js結尾的內容,執行相關操做
}
location = /kaoshi/[0-9]+-[0-9]+-[0-9]/ {
匹配站點根目錄/kaoshi/目錄內容
autoindex off #關閉瀏覽kaoshi目錄下以日期命名的文件,可是能瀏覽其餘內容
}
實際使用建議
因此實際使用中,我的以爲至少有三個匹配規則定義,以下:
#直接匹配網站根,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。
#這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁
# 第一個必選規則
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項
# 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
#第三個規則就是通用規則,用來轉發動態請求到後端應用服務器
#非靜態文件請求就默認是動態請求,本身根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了
location / {
proxy_pass http://tomcat:8080/
}