server_name and listen behaviour
ivan babrou
ibobrik at gmail.com
Wed Feb 13 04:56:56 UTC 2013
On 12 February 2013 23:14, Ruslan Ermilov <ru at nginx.com> wrote:
> On Tue, Feb 12, 2013 at 09:10:17PM +0400, ivan babrou wrote:
> > Hi, I have a question. It's better to describe with example
> > I point one.local and two.local to 127.0.0.1 and create following
> servers
> > in config for nginx:
> > server {
> > listen 80;
> > server_name one.local;
> > location / {
> > return 404;
> > }
> > }
> > server {
> > listen two.local:80;
> > server_name two.local;
> > location / {
> > return 403;
> > }
> > }
> > If I request one.local then 403 is returned. If i change listen for
> > one.local to one.local:80 then 404 correctly returned, but only after
> > restart, reload doesn't help (that's probably bug too).
> > I expect to get 404 if i request one.local even if I listen on all
> > addresses. Am I right?
>
> 127.0.0.1:80 and *:80 are two different socket addresses,
> and when you connect to 127.0.0.1:80, the first one will
> be used (two.local in your case). This is not specific
> to nginx, it's how sockets work.
>
> nginx by default optimizes such a config by creating only
> one listening socket [1], and pessimizes by using getsockaddr()
> to differentiate between multiple sockaddrs. This optimization
> can be turned off by using "bind" parameter (or some other
> parameters, see [1] for details). Nevertheless, 127.0.0.1:80
> and *:80 are still two different addresses, and 127.0.0.1:80
> is more specific than *:80.
See below, I only see one listening address in netstat.
As to "reload not working", I cannot reproduce this:
>
> (in my config I always return 200 with "$server_name")
>
> $ echo 'GET http://one:8000/' | nc 127.0.0.1 8000
> two.local
>
> # here config was changed to listen on 127.0.0.1:80
> # instead of *:80 for one.local
>
> # reload (kill -HUP nginx master process)
>
> $ kill -HUP 33122
> $ echo 'GET http://one:8000/' | nc 127.0.0.1 8000
> one.local
>
I have listen *:80 before reload, then change it to listen one.local:80 and
reaload. nginx/1.2.6
Before reload:
callisto ~ # netstat -ntl | fgrep ':80'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
After reload:
callisto ~ # netstat -ntl | fgrep ':80'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
After restart:
callisto ~ # netstat -ntl | fgrep ':80'
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN
Did you have one.local and two local when you check this?
> [1] http://nginx.org/r/listen
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
--
Regards, Ian Babrou
http://bobrik.name http://twitter.com/ibobrik skype:i.babrou
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20130213/bbca49b3/attachment-0001.html>
More information about the nginx-devel
mailing list