0
我有几个服务,他们站在一个nginx实例后面。为了处理认证,在nginx中,我拦截每个请求并将其发送到认证服务。在那里,如果证书是正确的,我设置一个包含用户相关信息的cookie。nginx代理服务器认证拦截
该请求现在应该路由到相应的服务,并设置cookie。
这是我的nginx的配置:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream xyz {
server ***;
}
upstream auth {
server ***;
}
server {
listen 8080;
location ~ ^/(abc|xyz)/api(/.*)?$ {
auth_request /auth-proxy;
set $query $2;
proxy_pass http://$1/api$query$is_args$args;
proxy_set_header X-Target $request_uri;
proxy_set_header Host $http_host;
}
location = /auth-proxy {
internal;
proxy_pass http://auth;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Target $request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-CookieName "auth";
proxy_set_header Cookie "auth=$cookie_auth";
proxy_set_header Set-Cookie "auth=$cookie_auth";
proxy_cookie_path/"/; Secure; HttpOnly";
add_header Cookie "auth=$cookie_auth";
add_header Set-Cookie "auth=$cookie_auth";
}
}
如果我提出请求到/ AUTH-代理具有x靶标头手动设置,响应包含按预期该cookie。
如果我向所需的目标发出请求,请求被拦截,它会到达/ auth-proxy,它正确设置cookie。但是,当请求到达目标时,它不包含cookie。
我假设nginx在执行目标请求时并未转发cookie。
最近几天我一直在为此苦苦挣扎...我错过了什么?
谢谢!