我正在使用AWS CloudFront终止我的SSL,然后再点击我的后端,并且需要将此流量与非CloudFront流量区分开来,以便在Nginx中设置proxy_set_header
。
我认为最好的方法是检查X-Amz-Cf-Id
标题(added by CloudFront),并设置proxy_set_header
。但是,我知道在Nginx if语句中设置proxy_set_header
是不可能的,这导致了我的问题。
如果只存在该标题,我该如何设置proxy_set_header
值?
答案 0 :(得分:9)
if
语句不是设置自定义标头的好方法,因为它们可能cause statements outside the if block to be ignored。
您可以使用map directive而不是相同的问题。
# 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;
答案 1 :(得分:3)
一般答案是您可以在if
中设置变量,然后使用变量。像这样:
set $variable "";
if ($http_X_Amz_Cf_Id) {
set $variable "somevalue";
}
proxy_set_header someheader $variable;