AWS CloudFrontを使用してバックエンドに到達する前にSSLを終了しています。このトラフィックを、CloudFront以外のトラフィックと区別して、Nginxにproxy_set_header
を設定する必要があります。
これを行う最善の方法は、X-Amz-Cf-Id
ヘッダー( CloudFrontによって追加 )を確認し、存在する場合はproxy_set_header
を設定することだと思います。ただし、Nginxifステートメントでproxy_set_header
を設定できないことは承知しており、これが私の質問につながります。
そのヘッダーが存在する場合にのみproxy_set_header
値を設定するにはどうすればよいですか?
一般的な答えは、if
に変数を設定してから、その変数を使用できるということです。このような:
set $variable "";
if ($http_X_Amz_Cf_Id) {
set $variable "somevalue";
}
proxy_set_header someheader $variable;
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;