匹配一组URL的Nginx位置块
我的应用程序中有一个IdentityAccess控制器,它包含四种操作方法:匹配一组URL的Nginx位置块,nginx,Nginx,我的应用程序中有一个IdentityAccess控制器,它包含四种操作方法: 登录 检查 刷新 撤销 因此,我可以通过localhost/IdentityAccess/login等访问这些操作方法。此外,我实现了Lua验证,这将保护一些路由。例如,这就是我如何保护所有到存储控制器的请求: location /store/ { rewrite_by_lua_file 'jwt-validation.lua'; proxy_pass http://store_server/
存储
控制器的请求:
location /store/ {
rewrite_by_lua_file 'jwt-validation.lua';
proxy_pass http://store_server/
...
}
但整个问题在于IdentityAccess控制器。在这个控制器中,我想保护除
登录
之外的所有操作方法。此外,我不想创建一大堆精确的位置,比如location/IdentityAccess/check{…
,location/IdentityAccess/refresh{…
等,并应用于每个位置Lua脚本。我想要的是某种正则表达式,它将匹配操作方法列表-检查、刷新和撤销-并忽略登录操作方法。但我不知道实现这一点的最佳方法是什么。选择了前缀匹配前缀最长的位置。因此,您只需要定义/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来实现,但在这种情况下,文件中位置的位置很重要,因为选择了第一个匹配项(但对于前缀位置,位置并不重要,因为选择了位置的最佳匹配项)
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;
}
谢谢!我明天会检查它!我唯一的问题是在/IdentityAccess/check请求的情况下,它是否会被正确地代理到checkAction方法并由checkAction方法处理?我们是否应该在您的第一个位置定义中修复proxy_-pass命令?哦,错过了它。需要删除proxy_-pass中的最后一个斜杠。因此,没有这个斜杠
/IdentIT访问/检查
请求将被代理到http://store_server/check
route?啊,有问题了。不,它将被代理到http://store_server/IdentityAccess/check
。如果需要http://store_server/check
-对于/IdentityAction/
位置和登录位置代理,需要斜杠shttp://store_server/login/;
但仅对于前缀位置,对于regexp位置可以不同。