- nginx是一個(gè)開(kāi)源的,,支持高性能,高并發(fā)的www服務(wù)和代理服務(wù)軟件,。
- nginx因具有高并發(fā)(特別是靜態(tài)資源),,占用系統(tǒng)資源少等特性,且功能豐富而逐漸流行起來(lái),。
- nginx不但是一個(gè)優(yōu)秀Web服務(wù)軟件,,還具有反向代理負(fù)載均衡功能和緩存服務(wù)功能,,與lvs負(fù)載均衡及Haproxy等專(zhuān)業(yè)代理軟件相比,Nginx部署起來(lái)更為簡(jiǎn)單,,方便,;在緩存功能方面,它又類(lèi)似于Squid等專(zhuān)業(yè)的緩存服務(wù)軟件,。
本文章主要介紹nginx配置文件中l(wèi)ocation詳解
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location
1 ,、[] 表示可選,可以不要,。依據(jù)不同的前綴“= ”,,“^~ ”,“~ ”,,“~* ”和不帶任何前綴,,表達(dá)不同的含義。
2 ,、查詢(xún)字符串不在URI范圍內(nèi),。例如:/films.htm?fid=123 的URI 是/films.htm
3、不同前綴,,分2大類(lèi),,正則location 和 普通location。
(1)“~ ”和“~* ”前綴表示正則location ,, “~ ”區(qū)分大小寫(xiě),,“~* ”不區(qū)分大小寫(xiě)
(2)其它前綴,包括“=”,、“^~ ”和“@ ”,,以及無(wú)任何前綴的都屬于普通location
4、對(duì)于一個(gè)特定的 HTTP 請(qǐng)求,,nginx先匹配普通location 再匹配 正則location
普通location 匹配只是臨時(shí)結(jié)果,,nginx 還需要繼續(xù)檢查正則location 。如果正則location匹配成功,,臨時(shí)結(jié)果將被覆蓋,,否則最后結(jié)果是之前匹配的臨時(shí)結(jié)果。
5,、普通location內(nèi)部的匹配原則是 最大前綴匹配
例如: location /prefix/mid/ {} 和 location /prefix/ {} ,,,對(duì)于HTTP 請(qǐng)求/prefix/mid/index.html 會(huì)匹配 location /prefix/mid/ {}
6,、匹配普通location 后 阻止匹配 正則location 的方法是前面加符號(hào) “^~ ”
^ 表示“非”,,~ 表示“正則”,“^~ ”字符意思是:不要繼續(xù)匹配正則
7、加“= ”可以阻止正則匹配,,“= ”表示 嚴(yán)格精確匹配
例子1:先普通location ,,再正則location
假設(shè) nginx 的配置如下:
server { listen 80; server_name localhost; # 普通 location 以“ / ”開(kāi)始的 URI 請(qǐng)求,所有的請(qǐng)求都能被匹配上 location / { root html; index index.html; deny all; #拒絕訪問(wèn) } # 以 .html 結(jié)尾的 URI 請(qǐng)求 location ~ \.html$ { allow all; #允許訪問(wèn) } # 精確匹配 location /a/1.html { allow all; } }
測(cè)試和結(jié)果:
127.0.0.1/ 403 Forbidden 匹配普通location 127.0.0.1/index.html 200 ok 匹配正則location 127.0.0.1/abc.html 404 Not Found 匹配正則location 127.0.0.1/a/1.html 200 ok 匹配普通location的精確匹配
例2:正則匹配
server { listen 80; server_name localhost; # 以 /p/ 開(kāi)頭,,.html 結(jié)尾的所有 URI 請(qǐng)求 location ~ ^/p/.*\.html$ { deny all; } # .html 結(jié)尾的所有 URI 請(qǐng)求 location ~ \.html$ { allow all; } # 以 /a/ 開(kāi)頭,,.html 結(jié)尾的所有 URI 請(qǐng)求,本設(shè)置無(wú)效 location ~ ^/a/.*\.html$ { deny all; } }
測(cè)試和結(jié)果:
127.0.0.1/c.html 404 Not Found 匹配第二個(gè)location 127.0.0.1/p/1.html 403 Forbidden 匹配第一個(gè)location 127.0.0.1/a/1.html 404 Not Found 匹配第二個(gè)location
例3:“@” 前綴 Named Location
假設(shè)配置如下:
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; allow all; } # 設(shè)置404頁(yè)面 error_page 404 = @fallback; # 請(qǐng)求代理到 baidu.com location @fallback { proxy_pass https://www.baidu.com; } }