我对正则表达式不太在行。我尝试在 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;
}
}