前面介紹過nginx.conf的文件結構,大致介紹了頂層的指令和各級指令,今天給大家介紹下http模塊裏面的子模塊server的指令location,該指令直接影響到請求路由轉發規則,乃重中之重。
location匹配規則介紹
在server模塊下,可以設置多個location模塊以滿足不同的需求,每個模塊匹配不同的請求URI。最常用的匹配符號主要包括(=、~、~*、^~、@
以及無符號匹配)。
基本語法如下:location [=|~|~*|^~|@] pattern{……},通過指定模式來和請求的URI匹配。
- 無修飾符
必須以指定模式開始
server {
server_name server1;
location /api{
……
}
}
如下請求鏈接能匹配:
http://server1/api
http://server1/api?t=1991
http://server1/api/
http://server1/api234
如下請求鏈接不能匹配:
http://server1/testapi
http://server1/v1/api
- = 等號
必須與指定的模式精確匹配
server {
server_name server2;
location = /api{
……
}
}
如下請求鏈接能匹配:
http://server2/api
http://server2/api?p1
如下請求鏈接不能匹配:
http://server2/api/
http://server2/api2
- ~
正則匹配,同時匹配時需要區分大小寫
server {
server_name server3;
location ~ ^/api$ {
……
}
}
如下請求鏈接能匹配:
http://server3/api
http://server3/api?p1=11&p2=22
如下請求鏈接不能匹配:
http://server3/API
http://server3/api/
http://server3/api234
- ~*
指定的正則表達式不區分大小寫
server {
server_name server;
location ~* ^/api$ {
……
}
}
下面的請求鏈接能匹配:
http://server/api
http://server/API
http://server/Api
http://server/APi
http://server/api?p1=11&p2=22
下面的請求鏈接不能匹配:
http://server/api/
http://server/apiv2
- ^~
類似於無修飾符的行爲,也是以指定模式開始,不同的是,如果模式匹配,
那麼就停止搜索其他模式了。
- @
定義命名location區段,這些區段客戶段不能訪問,只可以由內部產生的請
求來訪問,如try_files或error_page等
匹配優先級順序
查找順序和優先級
1:帶有“=“的精確匹配優先
2:沒有修飾符的精確匹配
3:正則表達式按照他們在配置文件中定義的順序
4:帶有“^~”修飾符的,開頭匹配
5:帶有“~” 或“~*” 修飾符的,如果正則表達式與URI匹配
6:沒有修飾符的,如果指定字符串與URI開頭匹配
root 、alias的區別
root指令和alias指令非常相似,很容易搞混淆,在這裏有必要說明一下兩者的區別和聯繫。顧名思義,alias是別名的意思,root則表示跟目錄的意思。
下面分別舉個例子說明將更好理解
location /img/ {
alias /var/www/image/;
}
這段配置表示。每次請求/img/時,nginx將請求的轉向 /var/www/image/ 目錄
location /img/ {
root /var/www/image;
}
這裏的配置表示/img/的根目錄是/var/www/image,則實際請求的目錄地址是 /var/www/image/img
注:alias後面必須要用“/”結束,否則會找不到文件的,而root則可有可無。