nginx代理服务器设置请求url,以便后续请求

nginx代理服务器设置请求url,以便后续请求
server {
    server_name 127.0.0.1;
    listen 3000;

    location = /auth {
        internal;
        proxy_pass http://127.0.0.1:8088/auth;

    }


    location / {
        auth_request /auth;

        # force Nginx to preserver the response proxy_set_header
        auth_request_set $falure_reason $sent_http_x_authenticationfail;

        error_page 401 =200 /login;
        proxy_pass http://127.0.0.1:9000;
    }

    location /login {           
        proxy_pass http://127.0.0.1:8081/sso;
    }
}

我正在开发一个身份验证服务。这个想法是,当请求到达根目录时,它将通过 /auth 进行身份验证(检查令牌),并且身份验证服务器位于http://127.0.0.1:8088/auth处理所有身份验证请求。然后,如果未设置令牌,身份验证服务器将响应 401,错误页面将捕获该错误并路由到 /login 以代理我的登录服务器http://127.0.0.1:8081/sso但问题是,当我通过 / -> /auth -> /login 时,服务器返回的请求 url 仍然是 127.0.0.1:3000/sso 而不是 ttp://127.0.0.1:8081/sso 因为之后我需要发送后续的 post 请求到http://127.0.0.1:8081/sso使用用户登录 ID/密码。但是 nginx 在浏览器上将我指向 127.0.0.1:3000/sso。

答案1

最终,我自己想通了。由于 nginx 充当反向代理,客户端只能访问代理 URL 127.0.0.1:3000/sso,因为 nginx 负责转发请求,只向客户端公开其 URL,而不是其底层服务器的 URL。因此,要将 post 请求从客户端发送回 http://127.0.0.1:8081/sso,我需要在 nginx 服务器中设置一个 sso 位置,以便将所有来自 127.0.0.1:3000/sso 的请求转发到http://127.0.0.1:8081/sso作为一致的代理机制。

相关内容