如何在nginx中向变量URI发送auth_request?

pb3skfrl  于 2023-03-17  发布在  Nginx
关注(0)|答案(2)|浏览(172)

我正在尝试使用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正确地定向授权请求?
(Note:我知道我可以通过X-Original-URI将原始请求包含在授权请求的报头中。但是,这意味着我必须在授权服务器上对完整的URI进行额外的处理以获取相关数据,如果有办法将授权请求发送到正确的URI,我宁愿不这样做。)

6tdlim6h

6tdlim6h1#

你不能在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 "";
}
8hhllhi2

8hhllhi22#

我使用这种方法,它适用于我的情况

location = /auth {
    internal;
    proxy_pass http://auth-server$request_uri;
}

相关问题