Nginx 从子域名重定向到主域名而不改变地址栏中的 URL

Nginx 从子域名重定向到主域名而不改变地址栏中的 URL

我有一个域和通配符子域。

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.coms2.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在子域名中使用,因为该配置仅用于重定向,不包含内容。

相关内容