我的应用程序中有一个IdentityAccess控制器,它包含四种操作方法:
所以,我可以通过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脚本。我想要的是某种与动作方法列表相匹配的正则表达式 - 检查,刷新和撤销 - 并且会忽略登录操作方法。但我不知道实现这一目标的最佳方法是什么。
答案 0 :(得分:2)
选择具有最长匹配前缀的前缀位置。所以你需要的是定义location /IdentityAction/ {
rewrite_by_lua_file 'jwt-validation.lua';
proxy_pass http://store_server;
...
}
location /IdentityAction/login/ {
proxy_pass http://store_server;
...
}
位置而不进行jwt验证。
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;
}
当然,这也可以通过regexp位置完成,但在这种情况下,文件中位置的位置很重要,因为选择了第一个匹配(但对于前缀位置位置并不重要,因为所选位置的最佳匹配)。使用正则表达式,它看起来像
ArrayList::new