首页 > 解决方案 > Nginx map 指令只使用一个条件

问题描述

在 Nginx 中,我有两个都不能正常工作的地图块。

1-我想使用动态 ssl 证书,而且一个域有一个通配符证书。我认为这是可行的,但它始终使用通配符条件,而不是默认值:

map $host $ssl_server_name {
        *.example.com     'example.com';
        default             $host;
}

//later ($ssl_server_name is always example.com)

ssl_certificate /home/ssl/$ssl_server_name/fullchain.pem;
ssl_certificate_key /home/ssl/$ssl_server_name/privkey.pem;

2-我只想为上述域设置标题,所以我使用了这个:

map $host $header_value {
       default 'another_value';
       *.example.com 'header_value';
}

// later ($header_value is always 'another_value')
proxy_set_header X-TEST-HEADER $header_value;

标签: nginx

解决方案


ssl_server_name 上的映射,女巫是已知的。还要添加主机名。

map $ssl_server_name $ssl_server_name {
        hostnames;
        *.example.com     'example.com';
        default            $ssl_server_name;
}
    
ssl_certificate /home/ssl/$ssl_server_name/fullchain.pem;
ssl_certificate_key /home/ssl/$ssl_server_name/privkey.pem;

推荐阅读