指令作用:
匹配指定的請求URI
語法:
location [=|~|~*|^~|@] /uri/ {configuration}
匹配命令:
~ 表示執行一個正則匹配,區分大小寫
~* 表示執行一個正則匹配,不區分大小寫
^~ 表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配其他。一般用來匹配目錄
= 進行普通字符精確匹配
無前綴 用於普通字符串
@ 定義一個命名的location,使用在內部定向時,例如error_page,try_files
# 匹配字符串分為兩種:普通字符串、正則表達式。
# ~和~* 用於正則表達式,其他前綴和無任何前綴都用於普通字符串。
# 正則表達式會根據匹配順序,匹配到第一個正則表達式后停止搜索。
# 普通字符串匹配則無視順序,只會選擇最精確的匹配。
優先級:
1、先匹配精確普通字符串,將最精確的匹配暫時存儲;如果沒有匹配上,進行普通字符串匹配,若匹配多個,按最長匹配,之后是^~匹配;
2、然后按照配置文件中的聲明順序進行正則表達式匹配,只要匹配到一個正則表達式,則停止匹配,取正則表達式為匹配結果;
3、如果所有正則表達式都匹配不上,則取1中的結果;
4、最后匹配“/”,如果普通字符串和正則表達式都匹配不上,則報404 NOT FOUND。
"=" > "完整路徑" > "^~" > "~/~*" > "/"
示例:
location = /{ #只匹配“/”
}
location / { #匹配任何請求,所有URI都是以“/”開始;更長字符匹配或正則表達式匹配會優先
}
location ^~ /Directory/ { #匹配任何以/Directory/ 開始的請求,並停止匹配其他location
}
location ~* .(gif|jpg|jpeg)$ { #匹配以gif、jpg、jpeg結尾的請求;但是遇到^~由它處理
}
location /index/ { #以/index/開頭的請求,如果鏈接的狀態為404。則會匹配到@index_error
error_page 404 @index_error;
}
location @index_error {
...
}
常用配置指令:alias、root、proxy_pass
1、alias
別名配置,用於訪問文件系統,在匹配到URI后,指向alias配置的路徑,如:
location /test/ {
alias /usr/local/;
}
#請求/test/file,返回文件/usr/local/file
正則表達式的location中的alias,會使用正則表達式的值
location ~* /test/(.+\.(gif|png|jpeg){
alias /usr/local/test1/$1;
}
eg:/test/love.gif轉化為/usr/local/test1/love.gif
2、root
根路徑配置,用於訪問文件系統,在匹配到URI后,指向root配置的路徑,並把請求路徑附加到其后,如:
location /test/ {
root /usr/local/;
}
#請求/test/file,將會返回文件/usr/local/test/file。
3、proxy_pass
代理配置,用於代理請求,匹配到URI后,轉發請求到proxy_pass配置的URL。
location /test/ {
proxy_pass http://192.168.1.111:8089/;
}
eg:/test/hello轉化到http://192.168.1.111:8089/hello
#如果proxy_pass配置了“/”則不附加location的URI,
沒有配置“/”,則會附加。