Заметка об использовании переменных в домене на web сервере nginx, или динамические поддомены.

Важно не забыть выше расположить статические поддомены, чтоб динамические их не перебивали.

Ну и примеры ниже:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server { 
    server_name www.example.com; 

    location / { 
        proxy_pass 127.0.0.1:80; 
    } 
}

server {
    server_name   ~^(?<dynamic>[a-z0-9\-]+)\.example.com$;

    location / {
        proxy_pass 127.0.0.1:80/sites/$dynamic$uri$is_args$args;
    }
}

Вот ещё вариант:

Если у вас много поддоменов или вы хотите создавать их автоматически, тогда имеет смысл создать одну универсальную конфигурацию, которая будет обслуживать все поддомены, направляя запросы посетителей в соответствующие каталоги.

В первую очередь, необходимо настроить DNS: добавить поддомен с именем * (звездочка, без кавычек) и направить его на IP вашего веб-сервера. Измените секцию server вашего сайта следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
server {
    listen 80;
    server_name example.com *.example.com;
    root /var/www/example.com/$subdomain;
    set $subdomain "";
    if ($host ~* ^([a-z0-9-\.]+)\.example.com$) {
        set $subdomain $1;
    }
    if ($host ~* ^www.example.com$) {
        set $subdomain "";
    }
}

Не забудьте поменять example.com на имя вашего домена. Эта конфигурация работает следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Адрес URL
Путь на сервере


http://example.com/
/var/www/example.com/


http://www.example.com/
/var/www/example.com/


http://vasya.example.com/
/var/www/example.com/vasya/


http://vasya.ivanov.example.com/
/var/www/example.com/vasya.ivanov/