nginx location塊配置小結(jié)
nginx可以通過(guò)配置文件中的location指令來(lái)定義不同的請(qǐng)求匹配規(guī)則和處理邏輯,也就是描述不同請(qǐng)求資源在服務(wù)器的位置或者配置代理轉(zhuǎn)發(fā)路徑。
location塊通常在server塊中,一個(gè)server塊可以包含多個(gè)location塊。
server { location {} location {} }
語(yǔ)法規(guī)則
location [ = | ~ | ~* | ^~ ] uri { ... }
其中[]位置是設(shè)置匹配方式符號(hào),有以下幾種情況
- none: 字符串前綴匹配,會(huì)繼續(xù)往后進(jìn)行正則匹配
- =: 代表精確匹配,命中后立即結(jié)束返回
- ~: 正則匹配,區(qū)分大小寫
- ~*: 正則匹配,不區(qū)分大小寫
- ^~: 最長(zhǎng)非正則表達(dá)式匹配(字符串匹配)。如果請(qǐng)求的URI命中這樣的位置塊,則不會(huì)進(jìn)行進(jìn)一步的匹配
uri就是表示的資源路徑標(biāo)識(shí)。
location配置既可以由前綴字符串定義,也可以由正則表達(dá)式定義。為了找到匹配給定請(qǐng)求的location,nginx首先檢查使用前綴字符串定義的位置(前綴匹配)。選擇匹配前綴最長(zhǎng)的位置并記住。然后按照正則表達(dá)式在配置文件中的出現(xiàn)順序依次進(jìn)行正則匹配。正則表達(dá)式的搜索在第一次匹配時(shí)終止,并使用相應(yīng)的配置。如果沒(méi)有找到與正則表達(dá)式的匹配,則使用先前記住的前綴匹配的配置。
下面來(lái)依次看下對(duì)應(yīng)的匹配
精確匹配
location = /test{ return 200 "= /test"; }
這種方式訪問(wèn)只匹配/test,訪問(wèn)/test/1這種就會(huì)報(bào)404錯(cuò)誤
前綴匹配
location /test{ return 200 "/test"; }
這種可以匹配前綴進(jìn)行匹配,像 /test-a,/test/a 都可以匹配到
正則匹配
在 location /test基礎(chǔ)上添加如下正則匹配
location ~ /test[0-9] { return 200 "reg[0-9]"; }
curl -i http://localhost/test1請(qǐng)求test1地址會(huì)落到該正則匹配地址,這個(gè)時(shí)候訪問(wèn)/testa 會(huì)落到上面的前綴匹配location /test里。這也說(shuō)名了前綴匹配不會(huì)直接結(jié)束,會(huì)繼續(xù)找下一個(gè)匹配的正則匹配,如果找到則訪問(wèn)正則匹配的location,否則進(jìn)入前綴匹配。
在前面的配置基礎(chǔ)上,再加一個(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í)候訪問(wèn)/test1還是會(huì)進(jìn)入/test[0-9]的配置,雖然后面的/test*也匹配,這里證明正則匹配只要匹配到一個(gè)后便立即結(jié)束。
正則匹配有兩種 location ~ 表示區(qū)分大小寫,location ~* 表示不區(qū)分大小寫。不區(qū)分大小寫這里就不演示了。
下面還有最后一種格式location ^~。這種也是字符串前綴匹配,不過(guò)這種區(qū)分于默認(rèn)字符串匹配的方式是,如果當(dāng)前l(fā)ocation ^~字符串前綴匹配,會(huì)立即結(jié)束,不會(huì)再繼續(xù)往下查找正則匹配。
還是搞個(gè)例子來(lái)看下,添加一個(gè)^~配置,此時(shí)配置如下:
location = /test {} location /test {} location ^~ /test1 {} location ~ /test[0-9] {} location ~ /test* {}
此時(shí)如果訪問(wèn)/test1則會(huì)直接進(jìn)入location ^~ /test1,雖然后面的正則匹配location ~ /test[0-9]也可以匹配,但是
先遇到location ^~ /test1匹配后就直接結(jié)束了。
配置location還有一點(diǎn)需要注意,nginx會(huì)檢查location規(guī)則不能重復(fù)。像location /test和location ^~ /test雖然規(guī)則符號(hào)不同,但是也被認(rèn)為是相同的location。一般情況下會(huì)配置一個(gè) location /來(lái)兜底所有的請(qǐng)求。正則匹配也是經(jīng)常用的一種配置方式,如location ~ .jpg$可以匹配所有的jpg圖片文件請(qǐng)求,location ~ ^/user/\d+可以匹配所有以/user/[用戶ID]開(kāi)頭的請(qǐng)求。
優(yōu)惠劵
- Nginx中Location配置超詳細(xì)講解
- Nginx反向代理location和proxy_pass配置規(guī)則詳細(xì)總結(jié)
- nginx?配置指令之location使用詳解
- Nginx配置?location模塊實(shí)現(xiàn)路由(反向代理、重定向)功能
- Nginx location 和 proxy_pass路徑配置問(wèn)題小結(jié)
- nginx 配置location匹配規(guī)則實(shí)例講解
- 詳解Nginx之Location配置(Location匹配順序)
- nginx的簡(jiǎn)單轉(zhuǎn)發(fā)請(qǐng)求之server和location配置詳解
- nginx配置location方法總結(jié)
相關(guān)文章
Nginx可視化管理軟件NginxProxyManager的使用
NginxProxyManager是一款基于Nginx的開(kāi)源可視化管理工具,支持通過(guò)WebUI簡(jiǎn)易管理Nginx服務(wù)器,支持DockerCompose快速部署在Linux、Windows、macOS上,提供SSL證書獲取、多代理管理等功能,感興趣的可以了解一下2024-11-11Nginx設(shè)置目錄的訪問(wèn)權(quán)限實(shí)現(xiàn)訪問(wèn)靜態(tài)資源
遇到Permission denied錯(cuò)誤,通常是Nginx用戶權(quán)限不足,本文就來(lái)介紹一下Nginx設(shè)置目錄的訪問(wèn)權(quán)限實(shí)現(xiàn)訪問(wèn)靜態(tài)資源2024-10-10nginx生成自簽名SSL證書配置HTTPS的實(shí)現(xiàn)
本文主要介紹在Nginx中生成自簽名SSL證書并配置HTTPS,包括安裝Nginx、創(chuàng)建證書、配置證書以及測(cè)試訪問(wèn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03Nginx下WordPress鏈接(url偽靜態(tài))301永久重定向?qū)崿F(xiàn)方法
在幾個(gè)blog程序中折騰的結(jié)果,導(dǎo)致url連續(xù)二次變化。這是第三次了。 nginx 通過(guò)rewrite 使用 permanent; 參數(shù) 成301永久url重定向2012-09-09Nginx服務(wù)啟動(dòng)和停止實(shí)現(xiàn)
使用Nginx的過(guò)程中,我們可能總是需要修改nginx配置文件,然后不停地啟動(dòng)或者停止nginx服務(wù),本文就來(lái)介紹一下,感興趣的可以了解一下2023-11-11重啟或殺掉Nginx進(jìn)程后丟失nginx.pid的解決辦法
在重啟或殺掉nginx進(jìn)程后,會(huì)丟失nginx.pid文件,導(dǎo)致nginx無(wú)法正常啟動(dòng),這里分享下解決方法2014-01-01解決Nginx轉(zhuǎn)發(fā)圖片不能顯示的問(wèn)題
在使用Nginx作為反向代理將iServer的HTTP協(xié)議轉(zhuǎn)換為HTTPS協(xié)議時(shí),可能會(huì)遇到靜態(tài)資源無(wú)法加載、頁(yè)面跳轉(zhuǎn)回HTTP協(xié)議、訪問(wèn)服務(wù)管理界面權(quán)限問(wèn)題等情況,本文給大家介紹解決Nginx轉(zhuǎn)發(fā)圖片不能顯示的問(wèn)題,感興趣的朋友一起看看吧2024-11-11