2013-10-14 28 views
13

auth_requestを使用して、認証要求が成功したときにヘッダーを設定し、実際の要求を処理する次のプロキシインラインにそのヘッダーを渡します。NGINX auth_requestプロキシを使用してヘッダーを設定する

NGINXとさまざまなプロキシを設定しましたが、認証リクエストに使用しているサーバ(図のAUTH PROXY)からヘッダを設定する方法がわかりません私は(nginxのデバッグログに以下を参照してください実際の要求が、これは一部であることを確認すると私の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 request ----> AUTH PROXY 
            | 
    |  <---  201 <------ SUCCESS 
    | 
    ----> underlying request ----> BACKEND SERVER 

次のサーバ(図中のバックエンドサーバ)に渡されます認証サーバーからの応答の):

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_pass_header x-userproxy_set_header x-user $http_x_user;
  • proxy_set_header x-user $sent_http_x_user;proxy_set_header x-user $upstream_http_x_user;
    • が動作するように見えます。どのように私はこの作業を達成することができます任意のアイデア?バックエンドサーバに渡すヘッダを設定する認証プロキシであることに注意してください。

  • 答えて

    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

    私は$ userをクッキーに渡すことができますか? –

    +1

    @ ShivKumarはそれについて新しい質問を開きます。 – mjallday