匹配一组URL的Nginx位置块

匹配一组URL的Nginx位置块,nginx,Nginx,我的应用程序中有一个IdentityAccess控制器,它包含四种操作方法: 登录 检查 刷新 撤销 因此,我可以通过localhost/IdentityAccess/login等访问这些操作方法。此外,我实现了Lua验证,这将保护一些路由。例如,这就是我如何保护所有到存储控制器的请求: location /store/ { rewrite_by_lua_file 'jwt-validation.lua'; proxy_pass http://store_server/

我的应用程序中有一个IdentityAccess控制器,它包含四种操作方法:

  • 登录
  • 检查
  • 刷新
  • 撤销
  • 因此,我可以通过localhost/IdentityAccess/login等访问这些操作方法。此外,我实现了Lua验证,这将保护一些路由。例如,这就是我如何保护所有到
    存储
    控制器的请求:

    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位置可以不同。