使用NGINX auth_request代理设置标题

我想使用auth_request设置一个成功的authentication请求头,然后将其传递给下一个代理内联,将处理实际的请求。

我已经设置NGINX和各种代理做他们的事情,但是我不确定如何从服务器(图中的AUTH代理)设置标题,我使用的身份validation请求,以便该标题传递给下一台服务器(图中的BACKEND SERVER)

NGINX ---- auth request ----> AUTH PROXY | | <--- 201 <------ SUCCESS | ----> underlying request ----> BACKEND SERVER 

我的NGINXconfiguration看起来像

 server { listen 9123; resolver 10.3.0.2; resolver_timeout 30; location / { auth_request /_auth; proxy_set_header x-user $http_x_user; proxy_pass http://backend_server; } location = /_auth { internal; proxy_pass https://auth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } } 

当我发出实际的请求时,我在NGINXdebugging日志中看到以下内容(这是来自auth服务器的响应的一部分):

 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Content-Type: text/html; charset=utf-8" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Date: Mon, 14 Oct 2013 17:46:42 GMT" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Server: nginx/1.2.5" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Vary: Cookie" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "x-user: 1" 

我想采取x-user头,并将其传递到后端服务器。

我已经试过location /块的各种组合,但他们都没有工作。 例如

  • proxy_set_header x-user $upstream_http_x_user;
  • proxy_set_header x-user $http_x_user;
  • proxy_set_header x-user $sent_http_x_user;
  • proxy_pass_header x-user

这些似乎都没有工作。 任何想法我可以如何完成这项任务? 请注意,这是设置我想传递到后端服务器头的auth代理,

Woop,想通了。 正确的NGINX配置如下所示:

 location / { auth_request /_auth; auth_request_set $user $upstream_http_x_user; proxy_set_header x-user $user; proxy_pass http://backend_server; } 

问题是,你不能直接将头部分配到另一个头部,你必须使用auth_request_set将头部设置为一个变量 ,然后将该变量分配给头部。