Obey server_name in Nginx
Posted
by
pascal
on Server Fault
See other posts from Server Fault
or by pascal
Published on 2012-09-09T22:18:23Z
Indexed on
2012/09/10
3:40 UTC
Read the original article
Hit count: 460
nginx
|servernames
I want nginx/0.7.6 (on debian, i.e. with config files in /etc/nginx/sites-enabled/
) to serve a site on exactly one subdomain (indicated by the Host header) and nothing on all others. But it staunchly ignores my server_name
settings?!
In sites-enabled/sub.domain
:
server {
listen 80;
server_name sub.domain;
location / { … }
}
Adding a sites-enabled/00-default
with
server {
listen 80;
return 444;
}
Does nothing (I guess it just matches requests with no Host?)
server {
listen 80;
server_name *.domain;
return 444;
}
Does prevent Host: domain
requests from giving results for Host: sub.domain
, but still treats Host: arbitrary
as Host: sub-domain
.
The, to my eyes, obvious solution isn't accepted:
server {
listen 80;
server_name *;
return 444;
}
Neither is
server {
listen 80 default_server;
return 444;
}
Since order seems to be important: renaming 00-default
to zz-default
, which, if sorted, places it last, doesn't change anything. But debian's main config just includes *
, so I guess they could be included in some arbitrary file-system defined order?
This returns no content when Host:
is not sub.domain
as expected, but still returns the content when Host
is completely missing. I thought the first block should handle exactly that case!? Is it because it's the first block?
server {
listen 80;
return 444;
}
server {
listen 80;
server_name ~^.*$;
return 444;
}
© Server Fault or respective owner