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
これらはどれも機能していないようです。このタスクをどのように達成できるかについてのアイデアはありますか?バックエンドサーバーに渡すヘッダーを設定しているのは認証プロキシであることに注意してください。
うーん、それを考え出した。正しい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に設定し、その変数をヘッダーに割り当てる必要があります。