nginx auth_request redirect



我使用auth_request模块(http://nginx.org/en/docs/http/ngx_http_auth_request_module.html(。我的nginx配置:

auth_request /auth;
auth_request_set $backend_status $upstream_status;
location / {
    proxy_pass http://unicorn;
    error_page 401 @auth;
}
location = /auth {
    internal;
    proxy_pass https://proxy_pass_url;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}
location @auth {
    if ($backend_status = "401") {
      return 302 https://proxy_pass_url/login? origin=$scheme://$http_host$request_uri;
    }
}

但是我的重定向不起作用。我的配置有什么问题?

auth_request_set变量在

if块中无法访问,但在提供if语句的access_by_lua中可用。

      access_by_lua_block {
        if ngx.var["backend_status"] == "401" then
          return ngx.redirect("https://proxy_pass_url/login? origin=" .. $scheme .. "://" .. $http_host .. $request_uri)
        end
      }

你的意思是它不起作用?我假设您没有重定向,但是请求的状态代码是什么?/auth 子请求的状态代码是什么?你在哪个nginx上测试它?您是否检查了错误/访问日志?

我问是因为我拿了你的代码,在 Nginx 1.19.1 上运行并且效果很好。当/auth 子请求返回 401 错误时,我正在通过@auth位置重定向。我们可以在这里改进的一件事。你不需要检查 $backend_status 变量是否等于 401,如果 Nginx 将请求传递到@auth位置,这意味着我们有来自/auth 的 401 :)

溴,皮奥特

相关内容

  • 没有找到相关文章

最新更新