Nginx 仅将根域而不是子域重定向到 www

Nginx redirect only root domain but not subdomain to www

目前我正在使用下面的设置将非 www 域重定向到 www 域并且工作正常:

server {
    listen       80;
    server_name  example.com;
    return       301 http://www.example.com$request_uri;
}

server {
    listen 80;
    server_name www.example.com;
    location / {
        proxy_pass http://www.example.com:8888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

但是,现在我想允许通配符子域,但似乎所有子域都被重定向到 www.domain.com。所以我的问题是如何让它只将根域重定向到 www 而排除所有其他子域?谢谢

第一个服务器块也是隐含的默认服务器,这意味着任何不匹配www.example.com的域名都将由它处理。

如果您希望第二个服务器块处理除 example.com 之外的所有域,您可以通过添加 default_server 选项添加到 listen 指令。有关详细信息,请参阅 this document

例如:

server {
    listen       80;
    server_name  example.com;
    return       301 http://www.example.com$request_uri;
}

server {
    listen 80 default_server;
    ...
}