![](/img/trans.png)
[英]nginx auth_request_set does not allow test the variable in the context
[英]Nginx auth_request_set is not working as expected
我已經查看了這些類似的帖子:
但是,我認為我仍然需要一些幫助......
我面臨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
上做錯的事情。 我只是不確定我在這里做錯了什么。 謝謝你的幫助。
您面臨的問題是auth_request_set
僅用於在auth_request
的子請求的上下文中設置變量。 在您的示例中, auth_request_set
語句不在location = /fake-auth block
內,因此未設置變量$auth_resp_x_user
。
您可以通過將auth_request_set
語句移動到location = /fake-auth
塊中來解決此問題,如下所示:
map $auth_resp_x_user $invalid_user {
default "1";
authUser "0";
}
server {
listen 8080;
auth_request /fake-auth;
location = /fake-auth {
auth_request_set $auth_resp_x_user authUser;
return 200;
}
location / {
if ($invalid_user) {
return 403;
}
return 200;
}
}
這樣,當對/fake-auth
發出子請求時,變量$auth_resp_x_user
將被設置為“authUser”,然后它可以在主請求中使用。
或者,您可以在主請求中使用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 {
return 200;
}
location / {
if ($invalid_user) {
return 403;
}
return 200;
}
}
重要的是要記住auth_request_set
應該在子請求完成后使用,否則不會設置變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.