Nginx的location規則 優先順序和路徑替換

2021-09-19 11:54:39 字數 1331 閱讀 9536

nginx是反向**和負載均衡的首選工具,nginx的location配置有許多細節內容在網上不容易找到資料,或者解釋不清。本文對locaiton的常見特性進行介紹。

locaiton有四中型別的匹配規則,分別為完全匹配(=)、字首普通匹配(^~)、正規表示式匹配(~或者~*)、普通匹配

規則說明

「最長」命中

^~和普通命中,都是優先使用匹配最長的結果,示例如下:

[plain] view plain

copy

location ^~ /a   

location ^~ /aaa   

如果url為/aaa,則上面兩個location都匹配成功,但用於location ^~ /aaa較長,所以最終會以/aaa作為root

上例中如果是普通匹配(把location的^~去掉),結果也是一樣的

規則配置proxy_pass時,可以實現url路徑的部分替換。

proxy_pass的目標位址,預設不帶/,表示只**網域名稱,url和querystring部分不會變(把請求的path拼接到proxy_pass目標網域名稱之後作為**的url)

如果在目標位址後增加/,則表示把path中location匹配成功的部分剪下掉之後再拼接到proxy_pass目標位址

比如請求 /a/b.html

[plain] view plain

copy

location /a   

[plain] view plain

copy

location /a   

如上兩個匹配成功後,實際**的目標url分別是

http://server/a/b.html (把/a/b.html拼接到http://server之後)

http://server/b.html (把/a/b.html的/a去掉之後,拼接到http://server/之後)

要求注意的是,對於location為正規表示式的匹配,proxy_pass的目標位址不可以帶/

比如,如下配置會報錯:

[plain] view plain

copy

location ~ /abc(.*)   

正規表示式的替換

如果是正規表示式,想要實現proxy_pass的路徑替換,可以使用如下方式:

[html] view plain

copy

location ~ /abc(.*)   

如上可以把(.*)所匹配的內容拼接到之後,關於$1的使用,可以參考各種程式語言的正規表示式

另一種方法是:

[html] view plain

copy

location  /abc   

Nginx 核心配置location匹配規則說明

location介紹 location指令是nginx中最核心的一項配置,根據預先定義的url匹配規則來接收使用者傳送的請求,根據匹配結果,將請求 到後台伺服器 非法的請求直接拒絕並返回403,404,500錯誤處理等。location指令語法 location uri 或 location nam...

nginx的location配置詳解

語法規則 location uri 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 注意是空格 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 和 分...

nginx的location配置詳解

語法規則 location uri 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 注意是空格 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 和 分...