使用NGINX auth_request代理设置头文件

我想使用auth_request在成功的认证请求后设置一个标题,然后将其传递给将处理实际请求的下一个代理内联.

我已经设置Nginx和各种代理来做他们的事情,但是我不确定如何设置我用于认证请求的服务器(图中的AUTH PROXY)的标题,以便将该标头传递给下一个服务器(图中的后端服务器)

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

我的Nginx配置看起来像

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;
    }                                                                                                                             
}                                                              

当我提出实际请求时,我在Nginx调试日志中看到以下内容(这是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头放在后端服务器上.

我已经尝试过各种组合的位置/块,但没有一个工作.例如.

> 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将标题设置为变量,然后将该变量分配给标题.

相关文章

一、Linux下Nginx的安装 1.去官网&#160;http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...