2

nginxに特定のCookieが存在するかどうかを確認する方法はありますか?今のクッキーが存在する場合に限り、条件付きでnginxのヘッダを上書きする方法はありますか?

私はクッキーからヘッダーを設定するには、以下のようなセクションがあります。

proxy_set_header x-client-id $cookie_header_x_client_id; 

私はクッキーがそうでなければ、ヘッダーを上書きしていない、ヘッダーを設定し、その後存在するかどうかを確認します。

if ($cookie_header_x_client_id) { proxy_set_header x-client-id $cookie_header_x_client_id; } 

は、しかし、それは動作しません

とエラーの下に示します:

私が試した

"proxy_set_header" directive is not allowed here in /etc/nginx/sites-enabled/website:45 

任意のソリューション?

+0

@Dayo、あなたの編集は削除される適切な情報をもたらしました質問から。編集後、OPが何を達成したかったのかはもはや明確ではありませんでした。 – cnst

答えて

2

ifコンテキスト内に許可されるディレクティブの数は、nginxに限られています。これは、ifrewriteモジュールの一部であるという事実に関連しています。したがって、その文脈の中では、モジュールのドキュメンテーション内で具体的に概説されているディレクティブのみを使用することができます。

この「制限」の周りの一般的な方法は、中間変数を使用して状態を構築し、そのような中間変数を使用してproxy_set_headerのようなディレクティブを使用することです:

set $xci $http_x_client_id; 
if ($cookie_header_x_client_id) { 
    set $xci $cookie_header_x_client_id; 
} 
proxy_set_header x-client-id $xci; 
+0

'{" reason ":" x-client-idがなく、Authorizationヘッダーからclient_idを抽出できませんでした。 "}' – ALH

+0

'x-client-id'のヘッダーが設定されていないと、最初の行はエラーを発生させ、ユーザーに400を返します – ALH

+0

@AlirezaHos、なぜあなたがそれを手に入れているのかわかりませんが、確かにnginxから来ていません。あなたのレポートの後、私は実際に上記の非常に正確な設定を試してみました。上記のいずれのオプションも設定されていないときにデフォルト値を設定したい場合は、余分なif文を追加してください(順序が入れ子になっていないことを確認してください)。 – cnst

関連する問題