我已经审查了这些类似的职位:
- Can't access added headers using NGINX auth_request_set
- https://serverfault.com/questions/954333/nginx-upsteam-cache-status-custom-header-will-not-appear
- Nginx auth_request_set directive doesn't work
不过,我想我在这方面还是需要一些帮助的...
我遇到的问题是auth_request_set无法按预期工作。
下面是一个简化的"概念证明"配置,它是我所面临的问题的一个易于重现的示例。可以作为站点配置运行:
map $auth_resp_x_user $invalid_user {
default "1";
authUser "0";
}
server {
listen 8080;
auth_request /fake-auth;
auth_request_set $auth_resp_x_user authUser;
location = /fake-auth {
# Mock a successful auth_request
return 200;
}
location / {
if ($invalid_user) {
return 403;
}
return 200;
}
}
我希望auth_request_set
在auth_request
完成后触发。
但是,似乎没有为$auth_resp_x_user
设置任何值,因此上面的位置/
将返回403。
如果我只将这一行更改为使用set
而不是auth_request_set
,它将正常工作。
这将返回位置/
的200,符合预期:
map $auth_resp_x_user $invalid_user {
default "1";
authUser "0";
}
server {
listen 8080;
auth_request /fake-auth;
set $auth_resp_x_user authUser;
location = /fake-auth {
# Mock a successful auth_request
return 200;
}
location / {
if ($invalid_user) {
return 403;
}
return 200;
}
}
既然set
工作正常,我知道我在auth_request_set
上做错了什么。我只是不确定我到底做错了什么。谢谢你的帮助。
1条答案
按热度按时间hyrbngr71#
您所面临的问题是
auth_request_set
仅用于设置auth_request
发出的子请求的上下文中的变量,在您的示例中,auth_request_set
语句不在location = /fake-auth block
中,因此变量$auth_resp_x_user
没有设置。您可以通过将
auth_request_set
语句移到location = /fake-auth
块中来解决此问题,如下所示:这样,当发出对
/fake-auth
的子请求时,变量$auth_resp_x_user
将被设置为“authUser”,然后可以在主请求中使用它。或者,您可以在主请求中使用
auth_request_set
设置变量,在子请求完成后,然后使用它,如下所示:一定要记住,
auth_request_set
应该在子请求完成后使用,否则,变量将不会被设置。