2013-10-14 95 views
13

我想在成功的身份驗證請求時使用auth_request設置標頭,然後將其傳遞給將處理實際請求的下一個內聯代理。使用NGINX身份驗證代理設置標頭

我設置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標題並將其傳遞給後端服務器。

我試過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代理,

回答

24

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到頁眉設置成變量,然後將該變量分配給一個頭。

+0

謝謝,它的作品 –

+0

如何將$用戶傳遞給cookie? –

+1

@ShivKumar爲此開闢了一個新的問題。 – mjallday