У меня есть домен и поддомены с подстановочными знаками.
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;
}
Теперь я не уверен, что мне не хватает в моей конфигурации.
Это должно работать (не проверено):
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
в поддомене, потому что конфигурация предназначена только для перенаправления без содержимого.