带通配符的 nginx 流图

带通配符的 nginx 流图

我对正则表达式不太在行。我尝试在 nginx 中执行此操作:

stream {

    map $ssl_preread_server_name $name {
        api.dom1.com dom1_backend;
        *.dom2.com dom2_backend;
    }

    upstream dom1_backend {
        server api.dom1.com:443;
    }

    upstream dom2_api_backend {
        server *.dom3.com:443;
    }

    server {
        listen 443;
        proxy_pass $name;
        ssl_preread on;
    }
}

如何让 dom2 工作?我只需要将通配符域映射回通配符域。

意味着任何 *.dom2.com 都会转到 *.dom3.com

答案1

为了使用主机名,您应该指定特殊hostnames参数map。这允许以您期望的方式解释星号通配符。

map $ssl_preread_server_name $name {
    hostnames;
    api.dom1.com dom1_backend;
    *.dom2.com dom2_backend;
}

答案2

我认为使用地图你可能不再需要上游,试试这个:

stream {
    map $ssl_preread_server_name $name {
        hostnames;
        api.dom1.com dom1_backend;
        *.dom2.com   dom2_backend;
    }

    server {
        listen 443;
        listen 6443;
        proxy_pass $name:$server_port;
        ssl_preread on;
    }
}

相关内容