Nginx

使用具有衝突和重疊路徑名的正則表達式

  • October 30, 2019

考慮以下正則表達式,我試圖將格式的請求路由/customers/:id/productscustomerproduct域。

我已將此衝突的重疊規則放在序列中的第一位以賦予其優先權,因為 location/customers也接受/customers/1

有人可以幫我解決以下路線嗎,我是 nginx 新手。

server {
   location /customers/[0-9]+/products {
       proxy_pass http://customerproduct:3000
   }

   location /customers {
       proxy_pass http://customer:3000;
   }

   location /products {
       proxy_pass http://product:3000;
   }
}

編輯

定影

location ~/customers/[0-9]+/products {
   proxy_pass http://customerproduct:3000;
}

編輯 2

修復 2。

server {
   location ^/customers/[0-9]+/products {
       proxy_pass http://customerproduct:3000
   }

   location ^/customers {
       proxy_pass http://customer:3000;
   }

   location ^/products {
       proxy_pass http://product:3000;
   }
}

位置塊評估的語法和順序在手冊頁中有詳細說明。

第一個位置塊旨在使用正則表達式,它需要~or~*運算符來指示。此外,應該匹配 URI 開頭的正則表達式應該包括^錨點。

例如:

server {
   location ~ ^/customers/[0-9]+/products {
       proxy_pass http://customerproduct:3000;
   }

   location /customers {
       proxy_pass http://customer:3000;
   }

   location /products {
       proxy_pass http://product:3000;
   }
}

其餘位置是前綴位置,因此塊的順序無關緊要。

引用自:https://serverfault.com/questions/989899