簡體   English   中英

Nginx auth_request_set 未按預期工作

[英]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_setauth_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM