How to exclude specific subdomains server_name in

2019-01-25 12:06发布

问题:

I'm using wildcard in server_name. I want to redirect all subdomains of example.com (configured as *.example.com) to foo.com except xyz.example.com

I have configuration as follows

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

I don't want to change any request coming to xyz.example.com

回答1:

You need at least two server blocks, and nginx will select the more specific server block to handle the request. See this document for details.

You will need a server block for xyz.example.com such as:

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

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

Then either a default_server or a wild card server, such as:

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

Or:

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