nginx之location指令詳解

前面介紹過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則可有可無。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章