nginx location指令詳解


Nginx的HTTP配置主要包括三個區塊,結構如下:
http { //這個是協議級別
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //這個是服務器級別
      listen 80;
      server_name localhost;
        location / { //這個是請求級別
          root html;
          index index.html index.htm;
        }
      }
}

location區段

通過指定模式來與客戶端請求的URI相匹配,基本語法如下:location [=|~|~*|^~|@] pattern{……}

1、沒有修飾符 表示:必須以指定模式開始,如:

server {
  server_name baidu.com;
  location /abc {
    ……
  }
}

那么,如下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde

 

2、=表示:必須與指定的模式精確匹配

server {
server_name sish
  location = /abc {
    ……
  }
}
那么,如下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1
如下是錯的:
http://baidu.com/abc/
http://baidu.com/abcde

 

3、~ 表示:指定的正則表達式要區分大小寫

server {
server_name baidu.com;
  location ~ ^/abc$ {
    ……
  }
}
那么,如下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1=11&p2=22
如下是錯的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde

 

4、~* 表示:指定的正則表達式不區分大小寫

server {
server_name baidu.com;
location ~* ^/abc$ {
    ……
  }
}
那么,如下是對的:
http://baidu.com/abc
http://baidu..com/ABC
http://baidu..com/abc?p1=11&p2=22
如下是錯的:
http://baidu..com/abc/
http://baidu..com/abcde

 

5、^~ 類似於無修飾符的行為,也是以指定模式開始,不同的是,如果模式匹配,
那么就停止搜索其他模式了。
6、@ :定義命名location區段,這些區段客戶段不能訪問,只可以由內部產生的請
求來訪問,如try_files或error_page等

查找順序和優先級
1:帶有“=“的精確匹配優先
2:沒有修飾符的精確匹配
3:正則表達式按照他們在配置文件中定義的順序
4:帶有“^~”修飾符的,開頭匹配
5:帶有“~” 或“~*” 修飾符的,如果正則表達式與URI匹配
6:沒有修飾符的,如果指定字符串與URI開頭匹配

Location區段匹配示例

location = / {   # 只匹配 / 的查詢.   [ configuration A ] } location / {   # 匹配任何以 / 開始的查詢,但是正則表達式與一些較長的字符串將被首先匹配。   [ configuration B ] } location ^~ /images/ {   # 匹配任何以 /images/ 開始的查詢並且停止搜索,不檢查正則表達式。   [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ {   # 匹配任何以gif, jpg, or jpeg結尾的文件,但是所有 /images/ 目錄的請求將在Configuration C中處   理。   [ configuration D ] } 各 請求的處理如下例: ■/ → configuration A ■/documents/document.html → configuration B ■/images/1.gif → configuration C ■/documents/1.jpg → configuration D

 

root 、alias指令區別

location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的話,則訪問/img/目錄里面的文件時,ningx會自動去/var/www/image/目錄找文件
location /img/ {
    root /var/www/image;
}
#若按照這種配置的話,則訪問/img/目錄下的文件時,nginx會去/var/www/image/img/目錄下找文件。] 

alias是一個目錄別名的定義,root則是最上層目錄的定義。

還有一個重要的區別是alias后面必須要用“/”結束,否則會找不到文件的。。。而root則可有可無~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM