Virtualhosts and map

What is the best way to configure virtualhost with map?

Varix

Posted at Nginx Forum:

On 26 February 2013 09:31, Varix [email protected] wrote:

What is the best way to configure virtualhost with map?

The question you have asked is very wide-ranging yet vague.
The only answer I can give you is “it depends on what you’re trying to
achieve”.

I suggest you formulate a better question.

If you include details of the things that you have tried already, this
will serve as a good indicator to people on the list that you’re not
just being lazy, can’t be bothered to google, or want people to do
your job for you.

HTH,
Jonathan

Jonathan M. // Oxford, London, UK
http://www.jpluscplusm.com/contact.html

Hallo Jonathan,

I have some proplems with the english language. This is bad in the IT
section.

My problem is, i can’t find an complett example to do that for
education.
All I find is
the “old Way” with sites-availbled and sites-enabled, what I have done
for
years.

In January I chance nginx to the new version.

My files in the folder sites-availabled
default
example1.com
example2.com
example3.com

My default file

default server

server {
listen 80 default_server;
server_name _;
access_log logs/default/default.access.log;
error_log logs/default/default.error.log;

root /www/default;

location / {
    root   /www/default;
    index  index.html index.htm;
}

location /i/ {
     alias /www/123/;
    }

# redirect server error pages to the static page /40x.html
#

error_page 400 401 402 403 404  /40x.html;
location = /40x.html {
     root  /www/default/html;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /www/default/html;
}

If the IP (xxx.xxx.xxx.xxx) is type in the browser, it shows only domain
example1.com.

After a few days I found the reason for this:

Change: now if the “include” directive with mask is used on Unix
systems, included files are sorted in alphabetical order.

My solution for this is to make a new big nginx.conf
In the part with the serverblocks the latest is the default one and all
is
OK.
This solution is OK for a few domains, but not for many domains.
I read that this can be done with map. But I can’t find an example for
this.

Now I am looking for examples how I can do that with map.

This from the nginx docu is not enough for me.

map $http_host $name {
hostnames;

default       0;

example.com   1;
*.example.com 1;
example.org   2;
*.example.org 2;
.example.net  3;
wap.*         4;

}

Varix

Posted at Nginx Forum:

Hallo Maxim D.,

thanks for your answer. It helps me.

This can’t be a reason as long as you have “default_server”
parameter of the “listen” directive properly set for listen
sockets used.

My thought was, the default file is the first alphabetical file
in the folder. And the next domainfile namend with do*.*.
As I make the big nginx.conf for the first time I had the same problem.
I had the default at the first serverblock. Then I write this
serverblock
to the end of the serverblocks and all was OK. This alphabetical sort
managed something in a other way, I thought.

I will test same things in the next days. Thanks

Varix

Posted at Nginx Forum:

Hello!

On Wed, Feb 27, 2013 at 06:40:27AM -0500, Varix wrote:

In January I chance nginx to the new version.

default server

location / {

}

If the IP (xxx.xxx.xxx.xxx) is type in the browser, it shows only domain
example1.com.

After a few days I found the reason for this:

Change: now if the “include” directive with mask is used on Unix
systems, included files are sorted in alphabetical order.

This can’t be a reason as long as you have “default_server”
parameter of the “listen” directive properly set for listen
sockets used.

wap.*         4;

}

Maps may be used to handle multiple domains in one server block,
e.g. to set document root depending on a domain:

map $host $server_root {
    hostnames;

    default           /www/default;
    foo.example.com   /www/foo;
    foo.example.org   /www/foo;
    bar.example.com   /www/bar;
}

server {
    listen 80;
    server_name foo.example.com foo.example.org bar.example.com ...;

    root $server_root;

    ...
}

This aproach may be usable if you have mostly identical handling
for many domains, with some minor differences which can be handled
using variables. It only makes sense if you have really many
domains (thousands of), and can’t afford distinct server{} blocks
for them.


Maxim D.