web-dev-qa-db-ja.com

NGINX auth_requestとoauth2_proxyでヘッダーを設定する

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

私は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デバッグログに以下が表示されます(これは認証サーバーからの応答の一部です)。

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

これらはどれも機能していないようです。このタスクをどのように達成できるかについてのアイデアはありますか?バックエンドサーバーに渡すヘッダーを設定しているのは認証プロキシであることに注意してください。

21
mjallday

うーん、それを考え出した。正しい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を使用してヘッダーをvariableに設定し、その変数をヘッダーに割り当てる必要があります。

38
mjallday