web-dev-qa-db-ja.com

ヘッダーが存在する場合、Nginxはproxy_set_headerを設定します

AWS CloudFrontを使用してバックエンドに到達する前にSSLを終了しています。このトラフィックを、CloudFront以外のトラフィックと区別して、Nginxにproxy_set_headerを設定する必要があります。

これを行う最善の方法は、X-Amz-Cf-Idヘッダー( CloudFrontによって追加 )を確認し、存在する場合はproxy_set_headerを設定することだと思います。ただし、Nginxifステートメントでproxy_set_headerを設定できないことは承知しており、これが私の質問につながります。

そのヘッダーが存在する場合にのみproxy_set_header値を設定するにはどうすればよいですか?

7
Manonthemoon

一般的な答えは、ifに変数を設定してから、その変数を使用できるということです。このような:

set $variable "";
if ($http_X_Amz_Cf_Id) {
  set $variable "somevalue";
}
proxy_set_header someheader $variable;
3
Digitalkapitaen

ifステートメントは、カスタムヘッダーを設定するのに適した方法ではありません。これは、 ifブロック外のステートメントが無視される原因となる の場合があるためです。

代わりに マップディレクティブ を使用できますが、同じ問題が発生する可能性はありません。

# outside server blocks
map $http_X_Amz_Cf_Id is_cloudfront {
    default "No";
    ~. "Yes";  # Regular expression to match any value
}

次に:

# inside location block
proxy_set_header X_Custom_Header $is_cloudfront;
12
Ian Mackinnon