nginx 注意事項
nginx使用花括號{}判斷區塊,所以當正則中包含花括號時,則必須用雙引號將正則包起來
location是nginx用來處理對同一個server不同的請求地址使用獨立的配置的方式
舉例:
location = / {
#只匹配“/”
... 配置A
}
location / {
#匹配任何請求,因為所有請求都是以“/”開始
#但更長字元匹配或正規表示式匹配會優先匹配
...配置B
}
location ^~ /images/ {
#匹配任何以/images/開始的請求,並停止匹配其他location
...配置C
}
location ~* .(gif|jpg|jpeg)$ {
#匹配以gif,jpg,jpeg結尾的請求,但是所有/images/目錄的請求由C處理
...配置D
}
訪問 / 會使用配置A
訪問 /documents/document.html 會使用配置B
訪問 /images/1.gif 會使用配置C
訪問 /documents/1.jpg 會使用配置D
sever區塊中如果有包含rewrite規則,則會最先執行,而且只會執行一次, 然後再判斷命中哪個location的配置,再去執行該location中的rewrite, 當該location中的rewrite執行完畢時,rewrite並不會停止,而是根據rewrite過的URL再次判斷location並執行其中的 配置. 那麼,這裡就存在一個問題,如果rewrite寫的不正確的話,是會在location區塊間造成無限迴圈的.所以nginx才會加一個最多重試10次的 上限
locatoin並非像rewrite那樣逐條執行,而是有著匹配優先順序的,當一條請求同時滿足幾個location的匹配時,其只會選擇其一的配置執行.
其尋找的方法為:
1. 首先尋找所有的常量匹配,如location /, location /av/, 以相對路徑自左向右匹配,匹配長度最高的會被使用,
2. 然後按照配置檔案中出現的順序依次測試正規表示式,如 location ~ download\/$, location ~* \.wtf, 第一個匹配會被使用
3. 如果沒有匹配的正則,則使用之前的常量匹配
而下面幾種方法當匹配時會立即終止其他location的嘗試
1. = 完全匹配,location = /download/
2. ^~ 終止正則測試,如location ^~ /download/ 如果這條是最長匹配,則終止正則測試,這個符號只能匹配常量
3. 在沒有=或者^~的情況下,如果常量完全匹配,也會立即終止測試,比如請求為 /download/ 會完全命中location /download/而不繼續其他的正則測試
總結:
1. 如果完全匹配(不管有沒有=),嘗試會立即終止
2. 以最長匹配測試各個常量,如果常量匹配並有 ^~, 嘗試會終止
3. 按在配置檔案中出現的順序測試各個正規表示式
4. 如果第3步有命中,則使用其匹配location,否則使用第2步的location
另外還可以定義一種特殊的named location,以@開頭,如location @thisissparta 不過這種location定義不用於一般的處理,而是專門用於try_file, error_page的處理,這裡不再深入.
用前文的例子來看看
location = / {
....配置A
}
location / {
....配置B
}
location ^~ /images/ {
....配置C
}
location ~* \.(gif|jpg|jpeg)$ {
....配置D
}
訪問 / 會使用配置A -> 完全命中
訪問 /documents/document.html 會使用配置B -> 匹配常量B,不匹配正則C和D,所以用B
訪問 /images/1.gif 會使用配置C -> 匹配常量B,匹配正則C,使用首個命中的正則,所以用C
訪問 /documents/1.jpg 會使用配置D -> 匹配常量B,不匹配正則C,匹配正則D,使用首個命中的正則,所以用D
location是nginx用來處理對同一個server不同的請求地址使用獨立的配置的方式
舉例:
location = / {
#只匹配“/”
... 配置A
}
location / {
#匹配任何請求,因為所有請求都是以“/”開始
#但更長字元匹配或正規表示式匹配會優先匹配
...配置B
}
location ^~ /images/ {
#匹配任何以/images/開始的請求,並停止匹配其他location
...配置C
}
location ~* .(gif|jpg|jpeg)$ {
#匹配以gif,jpg,jpeg結尾的請求,但是所有/images/目錄的請求由C處理
...配置D
}
訪問 / 會使用配置A
訪問 /documents/document.html 會使用配置B
訪問 /images/1.gif 會使用配置C
訪問 /documents/1.jpg 會使用配置D
sever區塊中如果有包含rewrite規則,則會最先執行,而且只會執行一次, 然後再判斷命中哪個location的配置,再去執行該location中的rewrite, 當該location中的rewrite執行完畢時,rewrite並不會停止,而是根據rewrite過的URL再次判斷location並執行其中的 配置. 那麼,這裡就存在一個問題,如果rewrite寫的不正確的話,是會在location區塊間造成無限迴圈的.所以nginx才會加一個最多重試10次的 上限
locatoin並非像rewrite那樣逐條執行,而是有著匹配優先順序的,當一條請求同時滿足幾個location的匹配時,其只會選擇其一的配置執行.
其尋找的方法為:
1. 首先尋找所有的常量匹配,如location /, location /av/, 以相對路徑自左向右匹配,匹配長度最高的會被使用,
2. 然後按照配置檔案中出現的順序依次測試正規表示式,如 location ~ download\/$, location ~* \.wtf, 第一個匹配會被使用
3. 如果沒有匹配的正則,則使用之前的常量匹配
而下面幾種方法當匹配時會立即終止其他location的嘗試
1. = 完全匹配,location = /download/
2. ^~ 終止正則測試,如location ^~ /download/ 如果這條是最長匹配,則終止正則測試,這個符號只能匹配常量
3. 在沒有=或者^~的情況下,如果常量完全匹配,也會立即終止測試,比如請求為 /download/ 會完全命中location /download/而不繼續其他的正則測試
總結:
1. 如果完全匹配(不管有沒有=),嘗試會立即終止
2. 以最長匹配測試各個常量,如果常量匹配並有 ^~, 嘗試會終止
3. 按在配置檔案中出現的順序測試各個正規表示式
4. 如果第3步有命中,則使用其匹配location,否則使用第2步的location
另外還可以定義一種特殊的named location,以@開頭,如location @thisissparta 不過這種location定義不用於一般的處理,而是專門用於try_file, error_page的處理,這裡不再深入.
用前文的例子來看看
location = / {
....配置A
}
location / {
....配置B
}
location ^~ /images/ {
....配置C
}
location ~* \.(gif|jpg|jpeg)$ {
....配置D
}
訪問 / 會使用配置A -> 完全命中
訪問 /documents/document.html 會使用配置B -> 匹配常量B,不匹配正則C和D,所以用B
訪問 /images/1.gif 會使用配置C -> 匹配常量B,匹配正則C,使用首個命中的正則,所以用C
訪問 /documents/1.jpg 會使用配置D -> 匹配常量B,不匹配正則C,匹配正則D,使用首個命中的正則,所以用D
last和break最大的不同在於
- break是終止當前location的rewrite檢測,而且不再進行location匹配
- last是終止當前location的rewrite檢測,但會繼續重試location匹配並處理區塊中的rewrite規則
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27181165/viewspace-776955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 部署nginx php注意事項NginxPHP
- RandomAccessFile注意事項randomMac
- @Lombok注意事項Lombok
- 詳解Linux(Centos)之安裝Nginx及注意事項LinuxCentOSNginx
- 快取注意事項快取
- 使用parallel注意事項Parallel
- 字串分割注意事項字串
- Xlistview的注意事項View
- 函式注意事項函式
- DUPLICATE DATABASE 注意事項Database
- bootstrap引用注意事項boot
- ovm搭建注意事項
- CSP 考前注意事項
- 生產注意事項
- 電量注意事項
- 部署專案注意事項
- iOS 程式碼注意事項iOS
- 換工作的注意事項
- 使用Google Fonts注意事項Go
- 程式設計注意事項程式設計
- Go 切片使用注意事項Go
- Android ShortCuts注意事項Android
- 伺服器注意事項伺服器
- 筆記:MMM注意事項筆記
- AIX配置NFS注意事項AINFS
- godoc 技巧與注意事項Go
- javascript程式碼注意事項JavaScript
- shell 指令碼注意事項指令碼
- Shrink操作的注意事項
- 使用CocosBuilder注意事項UI
- 日常工作注意事項
- jdk安裝注意事項JDK
- Jquery編寫注意事項jQuery
- ios開發注意事項iOS
- SQL TUNNING 注意事項SQL
- samba安裝 注意事項Samba
- removeChild使用時注意事項REM
- vmvare遷移注意事項