2017-02-15 67 views
3

我在我的應用程序的IdentityAccess控制器相匹配,包含四個操作方法:Nginx的位置塊一組網址

  1. 登錄
  2. 檢查
  3. 刷新
  4. 撤銷

所以,我可以通過localhost/IdentityAccess/login等訪問這些操作方法。此外,我實現了Lua驗證,這應該是安置一些路線。例如,我這是怎麼保證的所有請求來store控制器:

location /store/ { 
    rewrite_by_lua_file 'jwt-validation.lua'; 
    proxy_pass http://store_server/ 
    ... 
} 

但整個問題是IdentityAccess控制器。在此控制器中,我想確保除login之外的所有操作方法。此外,我不想創建大量精確位置,如location /IdentityAccess/check { ...location /IdentityAccess/refresh { ...等,並適用於每個位置的Lua腳本。我想要的是某種正則表達式,它會匹配一系列操作方法 - 檢查,刷新和撤消 - 並且會忽略登錄操作方法。但我不知道什麼是實現這一目標的最佳途徑。

回答

2

選擇具有最長匹配前綴的前綴位置。所以你需要的是定義/IdentityAction/login/沒有jwt驗證的位置。

location /IdentityAction/ { 
    rewrite_by_lua_file 'jwt-validation.lua'; 
    proxy_pass http://store_server; 
    ... 
} 

location /IdentityAction/login/ { 
    proxy_pass http://store_server; 
    ... 
} 

當然,這可以用正則表達式的位置做太多,但在文件中的位置的這種情況下,位置是非常重要的,因爲第一場比賽中選擇(因爲位置的最佳匹配選擇,但前綴地點位置並不重要) 。與正則表達式它可以看起來像

location ~ ^/IdentityAction/login/$ { 
    # first location in file 
    proxy_pass http://store_server; 
} 

location ~ ^/IdentityAction/$ { 
    # second location in file 
    rewrite_by_lua_file 'jwt-validation.lua'; 
    proxy_pass http://store_server; 
} 
+0

謝謝!我明天會檢查一下! – Jacobian

+0

我唯一的問題是在/ IdentityAccess /檢查請求的情況下,它將被正確代理到http:// store_server/check並通過checkAction方法處理?我們不應該在第一個位置定義中修正proxy_pass命令嗎? – Jacobian

+0

或使用一些重寫規則... – Jacobian