config 檔裡的 location 可用來定義請求 path 對應的回應
以下說明匹配規則
首先,要記住這幾個符號代表的意思:
1. = /uri:精準匹配,如果有對到搜尋會到此為止
2. ^~ /uri:前綴匹配,如果有對到搜尋會到此為止
3. ~ pattern:正規表達式匹配,區分大小寫
4. ~* pattern:正規表達式匹配,不區分大小寫
5. /uri:前綴匹配
6. /:通用匹配,所有的路徑一定會匹配到這個
採用的順序是:
1. = 精準匹配最優先
2. ^~ 前綴匹配,對到即使用
3. ~pattern, ~* pattern 正則匹配
4. 沒帶修飾的前綴匹配
5. 通用匹配
多個正則匹配的狀況,會選擇設定寫在上面的那個匹配
多個前綴匹配成功的狀況,會選擇匹配最長的那個
範例例題
server {
listen 80;
server_name localhost;
location = / {
...(1)
}
location / {
...(2)
}
location ~ \.(gif|jpg|png|js|css)$ {
...(3)
}
location ^~ /images/ {
...(4))
}
location /images/myspace/ {
...(5)
}
location ~* \.png$ {
...(6)
}
location /doc {
...(7)
}
location /docu {
...(8)
}
}
假設打來的 Request 路徑是
- /test -> (2)
首先會匹配到 / ,是(2)不是(1),因為 = 要完全匹配,只有 / 才會到(1),但還會繼續往下搜尋,下面的都沒有匹配,因此最終會走(2)
- /images/myspace -> (3)
首先會匹配到 / ,但還會繼續往下搜尋,接著又匹配到 /images,因為是 ^~,這時就直接走 (3),不會再往下查到 (4)
在上面的設定,其實(5)是永遠走不到,因為開頭是 /images/ 一定就先在 (4) 那就匹配,且因為是 ^~ 會直接採用,所以 (5) 走不到
- /document -> (8)
首先會匹配到 / ,但還會繼續往下搜尋,接著又匹配到 /doc,還會繼續往下搜尋,又匹配到 /docu,都是前綴匹配,會選擇匹配最長的那個,因此是 (8)
- /photo.png -> (3)
首先會匹配到 / ,但還會繼續往下搜尋,接著又匹配到 (3),還會繼續往下搜尋,又匹配到 (6),都是正則表達式匹配,會選擇在設定檔最上面的(3)
沒有留言:
張貼留言