如何在 nginx 配置中排除特定子域 server_name

How to exclude specific subdomains server_name in nginx configuration

我在 server_name 中使用通配符。我想将 example.com(配置为 *.example.com)的所有子域重定向到 foo.com 除了 xyz.example.com

我有如下配置

server {
        listen          80;
        server_name     *.example.com;
        location / {
            proxy_pass      http://.foo.com;
        }
}

我不想更改 xyz.example.com

的任何请求

您至少需要两个服务器块,nginx 将 select 更具体的服务器块来处理请求。有关详细信息,请参阅 this document

您将需要一个用于 xyz.example.com 的服务器块,例如:

server {
    listen      80;
    server_name xyz.example.com;

    location / {
        proxy_pass http://.foo.com;
    }
}

然后是 default_server 或通配符服务器,例如:

server {
    listen 80;
    server_name *.example.com;
    return http://foo.com/;
}

或者:

server {
    listen 80 default_server;
    return http://foo.com/;
}

'*' 通配符被 nginx 忽略:

nginx:[警告] 0.0.0.0.:80 上的服务器名称“*.example.com”冲突,已忽略