【问题标题】:Nginx, auth_request with dynamic path paramNginx,带有动态路径参数的 auth_request
【发布时间】:2020-01-31 11:47:35
【问题描述】:

我的网络服务有多个这样的网址:

POST /service
GET /service/a59aeaba-7f3f-4826-896a-aeb48e1db256
POST /service/a59aeaba-7f3f-4826-896a-aeb48e1db256/action1
POST /service/a59aeaba-7f3f-4826-896a-aeb48e1db256/action2
...

另外,我有不同的 url 有授权检查,如果成功将返回代码 200,如果失败将返回 401:

GET /service/auth/a59aeaba-7f3f-4826-896a-aeb48e1db256

现在路径中的这个uuid值作为参数,它是动态值。

我不知道如何捕获/service/{uuid}/* url 并将auth_request 设置为/service/auth/{uuid} 然后,成功响应后继续/service/{uuid}

在 Nginx 中甚至可以做到这一点吗?

【问题讨论】:

  • 继续 /service/{uuid} 是什么意思?您有办法捕获字符串和 proxy_pass 或重定向到 service/auth/{uid}。我觉得如果您控制 /service/auth/{uuid}/ 的返回码是可以做到的,但它是一个完整的 3 proxy_pass 和不同的配置。你能告诉我验证成功和不成功的验证返回什么http代码吗?
  • @flaixman 成功返回200,失败返回401
  • @Mr.D 你找到解决方案了吗?我陷入了类似的情况,我需要从 location 指令中获取捕获组(正则表达式)才能在 proxy_pass 中使用。它在没有 auth_request 时有效,但在我使用 auth_request 时无效。

标签: nginx auth-request


【解决方案1】:

您可以使用正则表达式捕获它。

location ~* ^/service/(?<uuid>.+)/ {

现在 uuid 位于命名组中,稍后您可以将其称为 ${uuid}

【讨论】:

  • 是否可以从 auth_request 调用的单独位置引用它?
  • 赋值给全局变量
猜你喜欢
  • 1970-01-01
  • 2017-03-18
  • 2018-03-08
  • 2019-07-25
  • 2014-08-17
  • 2018-06-12
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
相关资源
最近更新 更多