Nginx正則配置

Nginx配置中Location的語法規則 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ … }css

  • = 表示精確匹配
  • ~ 表示區分大小寫正則匹配
  • ~* 表示不區分大小寫正則匹配
  • ^~ 表示URI以某個常規字符串開頭
  • !~ 表示區分大小寫正則不匹配
  • !~* 表示不區分大小寫正則不匹配
  • / 通用匹配,任何請求都會匹配到

匹配順序

多個location配置的狀況下匹配順序爲:nginx

  1. 首先匹配 =
  2. 其次匹配 ^~
  3. 其次是按文件中順序的正則匹配
  4. 最後是交給 / 通用匹配

當有匹配成功時候,中止匹配,按當前匹配規則處理請求。web

經常使用的規則

  1. 精確匹配
location = / {
  proxy_pass http://127.0.0.1:9090/
}
複製代碼

將全部請求直接轉發給服務器的9090端口。正則表達式

  1. 處理靜態文件
#目錄匹配
location ^~ /static/ {
  root /webroot/static/;
}
#後綴匹配
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
  root /webroot/res/;
}
複製代碼
  1. 轉發動態請求到後端應用服務器
#將/account/開始的請求轉發給Account服務器
location /account/ {
    proxy_pass http://127.0.0.1:8080/
}
#將/order/開始的請求轉發給Order服務器
location /order/ {
    proxy_pass http://127.0.0.1:9090/
}
複製代碼

rewrite指令

  • last 至關於apache裏面的[L]標記,表示rewrite。
  • break 本條規則匹配完成後,終止匹配,再也不匹配後面的規則。
  • redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
  • permanent 返回301永久重定向,瀏覽器地址會顯示跳轉後的URL地址。
  1. 使用lastbreak實現URI重寫,瀏覽器地址欄不變。
  2. 使用alias指令必須用last標記;使用proxy_pass指令時,須要使用break標記。
  3. last標記在本條rewrite規則執行完畢後,會對其所在server{......}標籤從新發起請求,而break標記則在本條規則匹配完成後,終止匹配。

舉個例子

例子只是爲了你們理解,不是實際場景。apache

服務器提供一個接口 /api/v1/access, 終端用戶能夠經過瀏覽器頁面訪問, 也能夠經過公衆號訪問,也能夠經過App訪問。後端

需求來了,想要根據不一樣的渠道統計訪問數,咱們在終端調用接口的時候各自分配一個數字。api

  • 瀏覽器頁面:10000
  • 公衆號內頁面:20000
  • App頁面操做:30000

不一樣終端在訪問接口時將數字拼在接口前面,如:/10000/api/v1/access瀏覽器

Nginx須要把全部訪問請求轉到服務器,配置以下:服務器

location ~/([0-9]+)/(.*)$ {
  rewrite /([0-9]+)/(.*)$ /$2 break;
  proxy_pass http://127.0.0.1:9090;
}
複製代碼

$2 表示路徑中正則表達式匹配的第二個參數,也就是 (.*) 這部分。spa

好了,可能有朋友就問,這樣就能夠統計不一樣渠道的訪問量了? 答案確定是不行的麼,nginx這塊只是作了將不一樣渠道的請求轉發到同一個服務去,它並無作統計的工做。

統計的工做不屬於本片文章的內容,可是放心。 既然提到了這塊內容,實現方案仍是要給你們講的麼。

原理很簡單,Nginx的access訪問日誌中記錄了全部請求記錄,咱們就能夠拿這個數據去作統計,我這裏僅說一種ELK方案:就是將日誌數據推送到Elasticsearch中,而後就能夠在Kibana中作圖標展現這些指標了。想要了解ELK,請看個人另外一篇文章使用 ELK(Elasticsearch + Logstash + Kibana) 搭建日誌收集分析平臺

廣告時間:關注個人公衆號【JAVA九點半課堂】,回覆資源領取2T技術資料。看完這些資料,保證你的薪資超過25k,快來領取吧!

相關文章
相關標籤/搜索