1. 程式人生 > >nginx location 配置 正則表示式

nginx location 配置 正則表示式

1.location 介紹

  • location 是在 server 塊中配置,用來通過匹配接收的uri來實現分類處理不同的請求,如反向代理,取靜態檔案等
  • location 在 server 塊中可以有多個,他們不是按匹配順序不是按localtion的先後順序排序,而是按規則的優先順序
  • localtion 匹配功能只做匹配分發用,並不會改變uri的內容或其他作用,我一開始理解的時候就混淆了一些概念,建議多做測試看實際效果

2.localtion 匹配規則

  • 規則概覽
    • location [ = | ~ | ~* | ^~ ] uri { … }
    • location @name { … }
  • 優先順序:
    • (location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)

注1:規則不能混合使用
注2:以下例子說明都以該server為基礎

 server {
        listen       8861;
        server_name  abc.com;
    }

2.1 “=” 精確匹配

  • 內容要同表示式完全一致才匹配成功
    例:
location = / {
   .....
}
# 
只匹配http://abc.com # http://abc.com [匹配成功] # http://abc.com/index [匹配失敗]

2.2 “~”,大小寫敏感
例·:

location ~ /Example/ {
   .....
}

#http://abc.com/Example/  [匹配成功]
#http://abc.com/example/  [匹配失敗]

2.3.“~*”,大小寫忽略
例:

location ~* /Example/ {
   .....
}
# 則會忽略 uri 部分的大小寫
#http://abc.com/test/Example/  [匹配成功]
#http://abc.com/example/  [匹配成功]

2.4.“^~”,只匹配以 uri 開頭
例:

location ^~ /index/ {
   .....
}
#以 /img/ 開頭的請求,都會匹配上
#http://abc.com/index/index.page   [匹配成功]
#http://abc.com/error/error.page [匹配失敗]

2.5.“@”,nginx內部跳轉
例:

location /index/ {
    error_page 404 @index_error;
}

location @index_error {
   .....
}
#以 /index/ 開頭的請求,如果連結的狀態為 404。則會匹配到 @index_error 這條規則上。 

2.6 不加任何規則

  • 不加任何規則則時,預設是大小寫敏感,字首匹配,相當於加了“~”與“^~”
  • 只有 / 表示匹配所有uri
location /index/ {
    ......
}
#http://abc.com/index   [匹配成功]
#http://abc.com/index/index.page   [匹配成功]
#http://abc.com/test/index   [匹配失敗]
#http://abc.com/Index   [匹配失敗]

# 匹配到所有uri
location / {
    ......
}