gpt4 book ai didi

authentication - 有没有办法在 nginx 中使用多个 auth_request 指令?

转载 作者:行者123 更新时间:2023-12-03 14:29:29 24 4
gpt4 key购买 nike

我想使用多个 auth_request指令以尝试与多个服务器进行身份验证 - 即如果第一个身份验证服务器返回 403 ,尝试第二个身份验证服务器。我尝试了这样一种简单的方法:

location /api {
satisfy any;
auth_request /auth-1/;
auth_request /auth-2/;
proxy_pass http://api_impl;
}

location /auth-1/ {
internal;
proxy_pass http://auth_server_1;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}

location /auth-2/ {
internal;
proxy_pass http://auth_server_2;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}

但是 nginx 不会解析配置文件。我收到了回复
nginx: [emerg] "auth_request" directive is duplicate

有没有办法在 nginx 中实现这样的功能?

最佳答案

这是我在 google 中找到这个问题寻找相同的东西后的解决方案:

  • 设置一个将传递到环回 nginx 服务器的上游服务器
  • 让这些上游服务器做你的/auth-1 和/auth-2 端点正在做的事情,除了它们返回 503 关于身份验证错误(除了链中的最后一个仍然返回 401 以通知 nginx 没有更多服务器可以尝试)
  • /auth 上告诉 nginx只使用这个上游,所以它会按顺序尝试所有身份验证“服务器”(感谢 503 返回代码),直到其中一个成功或最后一个返回 401。
  • upstream auth {
    server 127.0.2.1:8000 max_fails=0;
    server 127.0.2.1:8001 max_fails=0;
    server 127.0.2.1:8002 max_fails=0;
    }

    # Method 1
    server {
    listen 127.0.2.1:8000;

    location / {
    proxy_pass http://auth_server_1; # Returns **503** on failure
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
    }
    }

    # Method 2
    server {
    listen 127.0.2.1:8001;

    location / {
    proxy_pass http://auth_server_2; # Returns **503** on failure
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
    }
    }

    # Method 3
    server {
    listen 127.0.2.1:8002;

    location / {
    proxy_pass http://auth_server_3; # Returns **401** on failure
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
    }
    }

    server {
    # ...
    location /api {
    auth_request /auth;
    proxy_pass http://api_impl;
    }

    location /auth {
    proxy_pass http://auth/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URL $request_uri;
    proxy_next_upstream error timeout http_503;
    }
    # ...
    }

    关于authentication - 有没有办法在 nginx 中使用多个 auth_request 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822565/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com