子子域被 NGINX 中的子域覆盖

Ben*_*Ben 7 subdomain overriding nginx

我有一台带有 Nginx 的服务器。我想建立两个网站:

  • backend.mysite.com
  • staging.backend.mysite.com

这是我的服务器块配置:

www.backend.mysite.com:

server {
        listen   80;
        server_name backend.mysite.com www.backend.mysite.com;
        location / {
                proxy_pass http://127.0.0.1:8800/; 
        }
}

server {
    listen 8800;
    server_name my.ip.address;
    root /projects/backend/production/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }        
}
Run Code Online (Sandbox Code Playgroud)

www.staging.backend.mysite.com:

server {
        listen   80;
        server_name staging.backend.mysite.com www.staging.backend.mysite.com;
        location / {
                proxy_pass http://127.0.0.1:8900/; 
        }
}

server {
    listen 8900;
    server_name my.ip.address;
    root /projects/backend/staging/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }        
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 backend.mysite.com 覆盖了 staging.backend.mysite.com。如果我的地址上有子域,我如何对 Nginx 说永远不要覆盖?

更新:

我尝试在我的第二个配置中添加另一个域 (my_other_site.com) 以检查它是否有效:

server {
        listen   80;
        server_name my_other_site.com www.my_other_site.com staging.backend.mysite.com www.staging.backend.mysite.com;
        location / {
                proxy_pass http://127.0.0.1:8900/; 
        }
}

server {
    listen 8900;
    server_name my.ip.address;
    root /projects/backend/staging/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }        
}
Run Code Online (Sandbox Code Playgroud)

当我访问 my_other_site.com 时,它运行良好。第二个站点按预期到达。 my_other_site.com, www.my_other_site.com,staging.backend.mysite.comwww.staging.backend.mysite.com具有相同的DNS A配置,它们指向相同的 IP。

更新 2:

当我禁用www.backend.mysite.com服务器块时,它可以工作。该网站staging.backend.mysite.com按预期工作。这意味着确实第一个块覆盖了第二个块。如何告诉第一个服务器块不考虑staging.backend.mysite.com?有没有办法排除特定的域名?

bas*_*sil 0

尝试为包含的配置文件提供与域名相同的名称,例如:

aa.domain.com --> aa.domain.com.nginx.conf
bb.domain.com --> bb.domain.com.nginx.conf
Run Code Online (Sandbox Code Playgroud)

所以 nginx 会按照自然字母顺序包含并捕获