2017-02-15 2 views
3

у меня есть контроллер IdentityAccess в моем приложении, который содержит четыре методы действия:Nginx расположение блока, который соответствует группе URLs

  1. логин
  2. проверки
  3. обновления
  4. отзывать

Итак, я могу получить доступ к этим методам действий с помощью localhost/IdentityAccess/login и т. Д. Кроме того, я применил проверку Lua, которая должна ecure некоторые из маршрутов. Например, это, как я обеспечить все запросы, поступающие к 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; 
    ... 
} 

Конечно, это можно сделать с помощью регулярных выражений места тоже, но в этом случае положение места в файле имеет важное значение, потому что выбран первый матч (но для местоположений префиксов положение не важно, потому что лучший матч расположение выбрано) , С regexp это может выглядеть как

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/check request, он будет корректно проверен на http: // store_server/check и обработан методом checkAction? Не следует ли каким-либо образом установить команду proxy_pass в определении вашего первого местоположения? – Jacobian

+0

или использовать правило перезаписи ... – Jacobian

Смежные вопросы