我有一个域和通配符子域。
main domain: example.com
subdomains: s1.example.com, s2.example.com etc.
现在的要求是
s1.example.com
将重定向至example.com/organization/s1
s2.example.com
将重定向至example.com/organization/s2
或者我s1.example.com
的s2.example.com
配置是:
upstream frontend {
server example.com;
}
server_name ~^(?<name>.+)\.example\.com$;
location / {
proxy_pass http://frontend;
rewrite ^/$ /organization/$name break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host example.com;
proxy_cache_bypass $http_upgrade;
}
现在我不确定我的配置中缺少什么。
答案1
这应该可行(未经测试):
server_name: *.example.com
location / {
if ($host ~* (.*)\.domain\.com) {
set $sub_domain $1;
return 301 $scheme://example.com/organization/$sub_domain;
}
}
或使用重写:
server_name *.example.com;
set $subdomain $1;
rewrite ^(.*)$ $scheme://example.com/organization/$1;
我认为最好将子域名 (*.example.com) 和主域名 (example.com) 的配置分开。如果分开,则不应proxy_pass
在子域名中使用,因为该配置仅用于重定向,不包含内容。