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

Man*_*oon 6 ssl nginx amazon-cloudfront

我正在使用AWS CloudFront在到达后端之前终止我的SSL,并且需要将此流量与非CloudFront流量区分开以proxy_set_header在Nginx中设置.

我认为最好的方法是检查X-Amz-Cf-Id标题(由CloudFront添加),并设置它proxy_set_header何时出现.但是,我知道不可能proxy_set_header在Nginx if语句中设置,这导致了我的问题.

如何proxy_set_header仅在存在标题时设置值?

Ian*_*non 10

if语句不是设置自定义标头的好方法,因为它们可能导致忽略if块之外的语句.

您可以使用map指令代替不容易出现相同问题的指令.

# outside server blocks
map $http_X_Amz_Cf_Id is_cloudfront {
    default "No";
    ~. "Yes";  # Regular expression to match any value
}
Run Code Online (Sandbox Code Playgroud)

然后:

# inside location block
proxy_set_header X_Custom_Header $is_cloudfront;
Run Code Online (Sandbox Code Playgroud)


Dig*_*aen 5

一般的答案是您可以在其中设置变量if,然后使用该变量。像这样:

set $variable "";
if ($http_X_Amz_Cf_Id) {
  set $variable "somevalue";
}
proxy_set_header someheader $variable;
Run Code Online (Sandbox Code Playgroud)