If my configuration looks something like
server {
listen 80;
server_name example.com;
}
how do I refuse requests to subdomain.example.com?
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;
}
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.)
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.
You can return 404 http code which refused subdomain like this
server {
listen 80;
server_name subdomain1.example.com subdomain2.example.com;
return 404;
}