nginx location指令
指令作用
匹配指定的URI(uri指路徑不包含引數和域名+埠【套接字】)
語法形式
官網:http://nginx.org/en/docs/http/ngx_http_core_module.html#location
Syntax: |
location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } |
Default: |
— |
Context: |
server, location |
location = /uri =表示精確字首匹配,只有完全匹配上才生效
location /uri 不帶任何修飾符字首匹配,/pay 匹配到/pay或/pay/end或/pay/xxx
location / 匹配所有路徑,因為uri都是以/開頭的
location ^~ uri ^~表示只匹配普通字串,不匹配正規表示式
location ~ pattern ~表示正規表示式匹配,不忽略大小寫
location ~* pattern ~*表示正規表示式匹配,忽略大小寫
location @xxx @ 是用來定義named location的可以理解為除了普通字串、正規表示式外的第三中模式;不是用來處理普通http請求,用來處理“內部重定向”
匹配模式和順序
匹配字串分為兩種:普通字串(literal string)和正規表示式(regular expression,
其中~、~*用於正規表示式,其他字首=、^~ 、沒有字首、@ 用於普通字串;
匹配順序: 1.先匹配普通字串,將最準確的暫時儲存起來;(普通字串之間是沒有順序的只有最準確匹配)
2.然後按照配置檔案中正規表示式中宣告的順序進行匹配,只要匹配到一條正規表示式,則停止匹配,取正規表示式的匹配結果;(正規表示式之間是有順序)
3.如果正規表示式沒有匹配成功,則取1中的匹配結果;
4.如果正規表示式和普通字串都沒有匹配到,則返回一個404NOT FOUND;
⚠️⚠️⚠️:正則匹配會根據匹配順序,找到第一個匹配的正規表示式後將停止搜尋。普通字串匹配則無視順序,只會選擇最精確的匹配。
完成下面一個小需求:
常用的配置指令:alias、root、proxy_pass
1.alias:別名設定,用於訪問檔案系統,在匹配到location的uri後指向alias配置的路徑:只能用於location裡面
location /test {
alias /data/files/; # 最後必須加一個/
}
請求/test/1.txt,將會返回檔案/data/files/1.txt;alias其實返回的是alias後面的路徑+去掉location路徑/檔名
alias匹配在正則匹配的location內,則正規表示式必須包含捕獲語句也就是加一個英文括號(),而且alias中也要引用這些捕獲值;
第一個()裡面的內容可以用$1獲取到,第二個()裡面的內容可以用$2獲取到,如:
location ~* /image/(.+\.(png|jpg|jpeg)) {
alias /data/files/$1;
}
請求只要匹配到正則,例如/test/image/1.png或者/image/1.png,都會轉為請求/data/files/1.png
2.root:根路徑配置,用於訪問檔案系統,不一定要用在location裡面。在匹配到location的uri後執行root配置路徑拼接location匹配的路徑:
location /test {
root /data/files; # 最後不能加/
}
請求/test/2.doc,root會轉到 /data/files/test/2.doc =====》也就是root後配置的路徑+location的路徑;
3、proxy_pass——反向代理配置,用於代理請求,適用於前後端負載分離或多臺機器、伺服器負載分離的場景,在匹配到location配置的URL路徑後,轉發請求到proxy_pass配置額URL,是否會附加location配置路徑與proxy_pass配置的路徑後是否有"/"有關,有"/"則不附加,如
location /test {
proxy_pass http://192.168.1.1:8080/;
}
訪問/test/i.txt會轉到http://192.168.1.1:8080/i.txt (沒有帶location路徑的,因為proxy_pass後帶了“/”)
location = /test/haha {
proxy_pass http://192.168.1.1:8080;
}
訪問/test/haha會轉到http://192.168.1.1:8080/test/haha (有帶location路徑的,因為proxy_pass後沒有帶“/”)
收藏幾片文章:
https://www.cnblogs.com/lidabo/p/4169396.html
https://segmentfault.com/a/1190000002797606
相關文章
- Nginx Location 指令語法解析Nginx
- nginx locationNginx
- Nginx Location 配置Nginx
- Nginx Location 路徑匹配Nginx
- nginx的location優化Nginx優化
- nginx location匹配規則Nginx
- nginx的location詳解Nginx
- 徹底弄懂 Nginx location 匹配Nginx
- nginx與location語法詳解Nginx
- nginx location匹配及rewrite規則Nginx
- Nginx location匹配及Rewrite重寫Nginx
- Nginx(六):配置解析之location解析Nginx
- 在nginx location中用alias代理檔案Nginx
- nginx的location 規則匹配練習Nginx
- 一文弄懂Nginx的location匹配Nginx
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- nginx location 和proxy_pass 代理說明Nginx
- Nginx之location中反向代理proxy_pass配置Nginx
- 理解Nginx中Server和Location的匹配邏輯NginxServer
- nginx配置location總結及rewrite規則寫法Nginx
- Nginx location 和 proxy_pass路徑配置詳解Nginx
- nginx的gzip指令介紹,Nginx的gzip指令使用小結Nginx
- 瞭解 Nginx server 和 location 塊選擇演算法NginxServer演算法
- nginx的listen指令解析Nginx
- nginx重啟指令碼Nginx指令碼
- nginx執行請求的工作原理之location匹配詳解Nginx
- 解決Nginx中location匹配不到末尾不加斜槓的URLNginx
- 一份簡單夠用的 Nginx Location 配置講解Nginx
- Nginx的location規則:優先順序和路徑替換Nginx
- nginx的配置檔案server_name的意義 location意義NginxServer
- Location
- 小心Nginx的add_header指令NginxHeader
- Nginx的mirror指令能幹啥?Nginx
- 如何用好Nginx的gzip指令Nginx
- Location物件物件
- nginx的反向代理proxy_pass指令Nginx
- shell指令碼一鍵安裝nginx指令碼Nginx
- CentOS7 nginx啟動指令碼CentOSNginx指令碼