如果存在标头,则Nginx设置proxy_set_header

时间:2016-12-02 13:12:31

标签: ssl nginx amazon-cloudfront

我正在使用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值?

2 个答案:

答案 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;