根據(jù)請求的URI設(shè)置配置集合。所有的匹配都是在解碼以后的,相鄰的兩個/會被翻譯成一個/。
一個location規(guī)則可以是一個 前綴字符串(prefix string) 也可以是一個正則表達(dá)式(Regular expressions)
正則表達(dá)式由修飾符“ * ” 開頭(用于大小寫不敏感的匹配),或者由修飾符“~”開頭(用于大小寫敏感的匹配)。給一個請求去查找匹配的時候,nginx首先檢查使用前綴字符串( prefix string )定義的規(guī)則。其中,所有匹配中的規(guī)則最長的一條會被確認(rèn)并標(biāo)記,繼續(xù)檢查正則表達(dá)式,按照配置文件的順序檢查。當(dāng)有匹配的正則記錄以后立即停止,并立即使用該條配置。如果沒有一條正則表達(dá)式被匹配到,則使用之前前綴字符串匹配到的配置。
location 是可以嵌套使用的,除了下面提到的一些意外。
如果最長匹配前綴位置具有“^?”修飾符,則不檢查正則表達(dá)式。
同樣,如果使用修飾符“=”可以做精確匹配。完全匹配到規(guī)則,則停止搜索。舉例,如果 “/”請求經(jīng)常發(fā)生,可以定義“l(fā)ocation = /” 可以加速請求的處理速度,因為搜索在第一次比對正確以后會立即終止。這樣的規(guī)則顯然不能被嵌套起來。
讓我們來舉一些例子:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
"/"請求匹配A規(guī)則,"/index.html"請求匹配B規(guī)則,"/documents/document.html"請求匹配C規(guī)則, "/images/1.gif"請求匹配D規(guī)則,"documents/1.jpg" 請求匹配規(guī)則E
指令作用匹配指定的請求uri(請求uri不包含查詢字符串,如http://localhost:8080/test?id=10,請求uri是/test)語法形式location [ = | ~ | ~* | ^~ | @] /uri/ { configuration }匹配模式及順序匹配字符串分為兩種:普通字符串(literal string)和正則表達(dá)式(regular expression),其中 ~ 和 ~* 用于正則表達(dá)式, 其他前綴和無任何前綴都用于普通字符串。匹配順序是:1、先匹配普通字符串,將最精確的匹配暫時存儲;2、然后按照配置文件中的聲明順序進(jìn)行正則表達(dá)式匹配,只要匹配到一條正則表達(dá)式,則停止匹配,取正則表達(dá)式為匹配結(jié)果;3、如果所有正則表達(dá)式都匹配不上,則取1中存儲的結(jié)果;4、如果普通字符串和正則表達(dá)式都匹配不上,則報404 NOT FOUND。location = /uri =開頭表示精確前綴匹配,只有完全匹配才能生效。location ^~ /uri ^~開頭表示普通字符串匹配上以后不再進(jìn)行正則匹配。location ~ pattern ~開頭表示區(qū)分大小寫的正則匹配。location ~* pattern ~開頭表示不區(qū)分大小寫的正則匹配。location /uri 不帶任何修飾符,表示前綴匹配。location / 通用匹配,任何未匹配到其他location的請求都會匹配到。注意:正則匹配會根據(jù)匹配順序,找到第一個匹配的正則表達(dá)式后將停止搜索。普通字符串匹配則無視順序,只會選擇最精確的匹配。常用配置指令alias、root、proxy_pass1、alias——別名配置,用于訪問文件系統(tǒng),在匹配到location配置的URL路徑后,指向alias配置的路徑,如:
location /test/ {
alias /usr/local/;
}
請求/test/1.jpg(省略了協(xié)議和域名),將會返回文件/usr/local/1.jpg。如果alias配置在正則匹配的location內(nèi),則正則表達(dá)式中必須包含捕獲語句(也就是括號()),而且alias配置中也要引用這些捕獲值。如:
location ~ /img/(.+.(gif|png|jpeg)) {
alias /usr/local/images/$1;
}
請求中只要能匹配到正則,比如/img/flower.png 或者 /resource/img/flower.png,都會轉(zhuǎn)換為請求/usr/local/images/flower.png。2、root——根路徑配置,用于訪問文件系統(tǒng),在匹配到location配置的URL路徑后,指向root配置的路徑,并把請求路徑附加到其后,如:
location /test/ {
root /usr/local/;
}
請求/test/1.jpg,將會返回文件/usr/local/test/1.jpg。3、proxy_pass——反向代理配置,用于代理請求,適用于前后端負(fù)載分離或多臺機(jī)器、服務(wù)器負(fù)載分離的場景,在匹配到location配置的URL路徑后,轉(zhuǎn)發(fā)請求到proxy_pass配置額URL,是否會附加location配置路徑與proxy_pass配置的路徑后是否有"/"有關(guān),有"/"則不附加,如:
location /test/ {
proxy_pass http://127.0.0.1:8080/;
}
請求/test/1.jpg,將會被nginx轉(zhuǎn)發(fā)請求到http://127.0.0.1:8080/1.jpg(未附加/test/路徑)。附:匹配規(guī)則