Behavior of server depends on a file name

Hello

I would like to run a few virtual sites on one IP on nginx 0.6.32
compiled
from source as Debian package on Debian Etch.

My nginx.conf contents are:

user www-data;
worker_processes 1;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log  /var/log/nginx/access.log;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;
tcp_nodelay        on;

gzip  on;

server_tokens     off;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

My virtual site file (www.bona-a.com) contents are:

server {
listen 80;
server_name www.bona-a.com;

    access_log  /var/log/nginx/www.bona-a.com.access.log;

    location / {
            root   /var/www/www.bona-a.com;
            index  default.html default.htm index.html index.htm;
    }

    # pass the PHP scripts to FastCGI server listening on 

127.0.0.1:9000
#
#location ~ .php$ {
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name;
#includefastcgi_params;
#}
}

If I name a file or symbolic link in /etc/nginx/sites-enabled/, that
holds
the information for a virtual site, www.bona-a.com, this site becomes a
catch-all site, answering all requests that go to the same ip and do not
match any of the sites defined in other files in
/etc/nginx/sites-enabled/.

Same is if I replace -a with - followed by any letter between b and d
(including). If I name the file www.bona-e.com or www.bona.com,
everything
works fine and i get 403 Forbidden as a reply.

What am I doing wrong?

Regards,

Gregor

The default site for a listener is the site marked

server {
listen 80 default;
}

if no servers are marked default then the first server defined (which
depends on the order that include /*.conf is evaluated) will be the
default server.

I get around this problem by defining a site called default.conf which
includes the listen 80 default; stanza.

Cheers

Dave

On Fri, Sep 12, 2008 at 10:59:47AM +0200, Gregor Jurgele wrote:

sendfile        on;
include /etc/nginx/conf.d/*.conf;

            #fastcgi_param  SCRIPT_FILENAME

Same is if I replace -a with - followed by any letter between b and d
(including). If I name the file www.bona-e.com or www.bona.com, everything
works fine and i get 403 Forbidden as a reply.

What am I doing wrong?

nginx does not sort include’d files, so the best way is to define
default
site before the include.

On Fri, Sep 12, 2008 at 07:15:08PM +1000, Dave C. wrote:

I get around this problem by defining a site called default.conf which
includes the listen 80 default; stanza.

Yes, this is second way: use default in listen.

On Fri, Sep 12, 2008 at 03:24:12PM +0200, Gregor Jurgele wrote:

Dave, Igor, thank you both for your prompt replies.

Does a web server have to have a default site defined? The thing is, if I do

Yes, there is always default site for given IP:port. This site receives
all request wiht unknown “host” headers or request without the header.

By default the default site will first site with given IP:port.
You can overide this using

 server {
    listen  IP:PORT  default;

Dave, Igor, thank you both for your prompt replies.

Does a web server have to have a default site defined? The thing is, if
I do
not explicitly declare a default site and leave all my files as they
are,
meaning the included file is named www.bona-a.com (or www.bona-b.com
www.bona-d.com), then the www.bona-a.com site becomes the default site.
If I
access f.e. mail.bona-a.com I receive the www.bona-a.com web page. But
if I
name the above file www.bona-e.com or www.bona.com, then suddenly there
is
no default site and I receive 403 Forbidden if I try to access f.e.
mail.bona-a.com. So a change from letter a to e in a file name
www.bona-a.com changes the behavior of the server from “default web site
defined” to “default web site not defined”.

Regards,

Gregor

Thank you.