【问题标题】:How do you send an auth_request to a variable URI in nginx?如何将 auth_request 发送到 nginx 中的变量 URI?
【发布时间】:2020-07-14 06:57:28
【问题描述】:

我正在尝试使用auth_request 模块来检查是否允许用户访问某个文件。用户在/my/download/uri/<File ID> 发布请求。我希望将授权请求发布到auth_service:9999/files/<File ID>。我的配置的相关部分如下:

location /my/download/uri {
    auth_request /auth/files/$uri;
    alias /my/file/directory;
}
location /auth {
    internal;
    proxy_pass http://auth_service:9999/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

请求被授权服务接收,但在字面上 /files/$uri;变量未放置。我尝试先通过set 变量准备好URI,但无济于事。如何让 nginx 正确引导授权请求?

(注意:我知道我可以通过 X-Original-URI 在授权请求的标头中包含原始请求。但是,这意味着我必须在授权服务器上对完整 URI 进行额外处理才能获得相关数据,如果有办法首先将授权请求发布到正确的 URI,我宁愿不这样做。)

【问题讨论】:

  • 尝试使用auth_request /auth;proxy_pass http://auth_service:9999/files/$uri;
  • @IvanShatsky 将$uri 添加到/auth 中的proxy_pass 会导致nginx 给出以下错误:[error] 6#6: *2 no resolver defined to resolve auth
  • 通过标头将$uri 转发到授权服务并打印它会显示它是/auth,而不是文件ID。看起来auth_request 忽略了当前的 URI。
  • @Wichilie 你设法让它工作了吗?有同样的问题

标签: nginx authorization auth-request


【解决方案1】:

您不能在 auth_request 中使用变量,这显然是 nginx 的设计选择 https://trac.nginx.org/nginx/ticket/761 我通过反复试验想出了这个。我无法将 $uri 放入变量中,不知道为什么。

location ~ /my/download/uri/(.*) {
    set $key $1
    auth_request /auth;
    alias /my/file/directory;
}
location /auth {
    internal;
    proxy_pass http://auth_service:9999/$key;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

【讨论】:

猜你喜欢
  • 2022-12-21
  • 2012-10-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多