3

If my configuration looks something like

server {
  listen 80;
  server_name example.com;
}

how do I refuse requests to subdomain.example.com?

4 Answers 4

7
server {
    listen 80;
    server_name subdomain.example.com;
    deny all;
}

Or, if you wanted to drop all traffic that wasn't to a domain explicitly defined in another server block in your config:

server {
    listen 80 default_server;
    server_name _;
    deny all;
}
2

Shane Madden's answer will work, or you may also use the non-standard response code 444, which will kill the connection without sending any headers (source: http://wiki.nginx.org/HttpRewriteModule)

To block specific subdomains:

server {
    server_name subdomain.example.com;
        return 444;
}

Or to block all subdomains or domains that are not handled elsewhere:

server {
    server_name _;
    return 444;
}

The latter option is useful when blocking domains that are duplicating your content and thus may hurt your search engine rankings. (This comes from personal experience.)

1

If your subdomain have trafic, better redirect all request from subdomain to domain like this

        if ($http_host != "example.com") {
            rewrite ^ http://example.com$request_uri permanent;
    }

in server section

It's SEO friendly.

1
  • In this case that's explicitly what I don't want to do though. Thanks.
    – Tom
    Jan 7, 2012 at 19:52
0

You can return 404 http code which refused subdomain like this

server {
    listen 80;
    server_name subdomain1.example.com subdomain2.example.com;
    return 404;
}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .