nginx - 子子域被 NGINX 中的子域覆盖

标签 nginx subdomain overriding

我有一台带有 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;
        }        
    }
    

    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;
        }        
    }
    

    我的问题是 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;
        }        
    }
    

    当我访问 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 ?有没有办法排除特定的域名?

    最佳答案

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

    aa.domain.com --> aa.domain.com.nginx.conf
    bb.domain.com --> bb.domain.com.nginx.conf
    

    因此 nginx 将按自然字母顺序包含和捕获

    关于nginx - 子子域被 NGINX 中的子域覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663403/

    相关文章:

    django - 如何在Kubernetes中实际设置django静态文件的样式?

    apache - 子域不使用 SSL 重定向

    linux - 在 Amazon EC2 中创建子域

    azure - 将子域重定向到Azure应用服务中的子目录

    c# - 是否可以使用属性来覆盖方法?

    linux - 浏览器中的 url 与 nginx 配置中 server_name 的值之间的区别

    docker - 如何为多个环境创建单个 NGINX.conf 文件

    ssl - Nginx SSL 信任库/cacert 规范

    javascript - 如何覆盖javascript native 对象的内置方法

    css - 如何覆盖 DataGrid header 的 GWT 混淆样式