- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會(huì )理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構許可:滇D3-20230001
- 代理域名注冊服務(wù)機構:新網(wǎng)數碼
nginx location塊配置
藍隊云小課堂:
nginx可以通過(guò)配置文件中的location指令來(lái)定義不同的請求匹配規則和處理邏輯,也就是描述不同請求資源在服務(wù)器的位置或者配置代理轉發(fā)路徑
location塊通常在server塊中,一個(gè)server塊可以包含多個(gè)location塊。
server {
location {}
location {}
}
語(yǔ)法規則:
location [ = | ~ | ~* | ^~ ] uri { ... }
其中[]位置是設置匹配方式符號,有以下幾種情況
none: 字符串前綴匹配,會(huì )繼續往后進(jìn)行正則匹配
=: 代表精確匹配,命中后立即結束返回
~: 正則匹配,區分大小寫(xiě)
~*: 正則匹配,不區分大小寫(xiě)
^~: 最長(cháng)非正則表達式匹配(字符串匹配)。如果請求的URI命中這樣的位置塊,則不會(huì )進(jìn)行進(jìn)一步的匹配
uri就是表示的資源路徑標識。
location配置既可以由前綴字符串定義,也可以由正則表達式定義。為了找到匹配給定請求的location,nginx首先檢查使用前綴字符串定義的位置(前綴匹配)。選擇匹配前綴最長(cháng)的位置并記住。然后按照正則表達式在配置文件中的出現順序依次進(jìn)行正則匹配。正則表達式的搜索在第一次匹配時(shí)終止,并使用相應的配置。如果沒(méi)有找到與正則表達式的匹配,則使用先前記住的前綴匹配的配置。
下面來(lái)依次看下對應的匹配
精確匹配
location = /test{
return 200 "= /test";
}
這種方式訪(fǎng)問(wèn)只匹配/test,訪(fǎng)問(wèn)/test/1這種就會(huì )報404錯誤
前綴匹配
location /test{
return 200 "/test";
}
這種可以匹配前綴進(jìn)行匹配,像 /test-a,/test/a 都可以匹配到
正則匹配
在 location /test基礎上添加如下正則匹配
location ~ /test[0-9] {
return 200 "reg[0-9]";
}
curl -i http://www.tjdsmy.cn/test1請求test1地址會(huì )落到該正則匹配地址,這個(gè)時(shí)候訪(fǎng)問(wèn)/testa 會(huì )落到上面的前綴匹配location /test里。這也說(shuō)名了**前綴匹配不會(huì )直接結束,會(huì )繼續找下一個(gè)匹配的正則匹配,如果找到則訪(fǎng)問(wèn)正則匹配的location,否則進(jìn)入前綴匹配**。
在前面的配置基礎上,再加一個(gè)正則配置location ~ /test*
location = /test{
return 200 "= /test";
}
location /test{
return 200 "/test";
}
location ~ /test[0-9] {
add_header Content-Type "text/plain";
return 200 "reg[0-9]";
}
location ~ /test* {
return 200 "test*";
}
這個(gè)時(shí)候訪(fǎng)問(wèn)/test1還是會(huì )進(jìn)入/test[0-9]的配置,雖然后面的/test*也匹配,這里證明正則匹配只要匹配到一個(gè)后便立即結束。
正則匹配有兩種 location ~ 表示區分大小寫(xiě),location ~* 表示不區分大小寫(xiě)。不區分大小寫(xiě)這里就不演示了。
下面還有最后一種格式location ^~。這種也是字符串前綴匹配,不過(guò)這種區分于默認字符串匹配的方式是,如果當前l(fā)ocation ^~字符串前綴匹配,會(huì )立即結束,不會(huì )再繼續往下查找正則匹配。
還是搞個(gè)例子來(lái)看下,添加一個(gè)^~配置,此時(shí)配置如下:
location = /test {}
location /test {}
location ^~ /test1 {}
location ~ /test[0-9] {}
location ~ /test* {}
此時(shí)如果訪(fǎng)問(wèn)/test1則會(huì )直接進(jìn)入location ^~ /test1,雖然后面的正則匹配location ~ /test[0-9]也可以匹配,但是
先遇到location ^~ /test1匹配后就直接結束了。
配置location還有一點(diǎn)需要注意,nginx會(huì )檢查location規則不能重復。像location /test和location ^~ /test雖然規則符號不同,但是也被認為是相同的location。一般情況下會(huì )配置一個(gè) location /來(lái)兜底所有的請求。正則匹配也是經(jīng)常用的一種配置方式,如location ~ .jpg$可以匹配所有的jpg圖片文件請求,location ~ ^/user/\\d+可以匹配所有以/user/[用戶(hù)ID]開(kāi)頭的請求。
更多小知識,可聯(lián)系藍隊云一起探討。
售前咨詢(xún)
售后咨詢(xún)
備案咨詢(xún)
二維碼
TOP