NGINX auth_request 和 302 响应状态 = 500 无效的 URL 前缀

NGINX auth_request 和 302 响应状态 = 500 无效的 URL 前缀

我正在尝试使用 OAuth2 服务器(授权码流)使 NGINX 验证请求,该服务器会将客户端重定向到登录页面。是否可以使用 auth_request 指令来实现这一点?这是我的 nginx.conf:

server {
    listen ${NGINX_PORT};

    proxy_send_timeout    600;
    proxy_connect_timeout    600;
    proxy_read_timeout    600;
    send_timeout        600;
    client_max_body_size 100m;
    absolute_redirect off;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;

    location / {
        auth_request /authn;
        gzip_static on;
        index   index.html;
        root /usr/share/nginx/html;
        try_files $uri $uri/ @index;
    }

    location @index {
        root /usr/share/nginx/html;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        expires 0;
        try_files /index.html =404;
    }

    location /api {
        set $target http://gateway:8030/api;
        proxy_pass http://gateway:8030/api;
    }
    location /authn {
        set $target http://gateway:8030/authn;
        proxy_pass http://gateway:8030/authn;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_pass_request_headers on;
        proxy_intercept_errors on;
        recursive_error_pages on;

        error_page 301 302 303 307 308 @handle_redirect;
    }

    location @handle_redirect {
        set $redirect_url $upstream_http_location;
        proxy_pass $redirect_url;
        }
}

但是我的 oauth 网关返回的重定向没有 schema://host:port,我得到了

invalid URL prefix in "/oauth2/authorization/gateway" while sending to client

为什么 NGINX 不明白它必须在重定向中保留主机和端口信息,我该如何解决这个问题?

相关内容