Как в Nginx сделать сайт доступным по разным доменам?

Есть настроенный для нескольких доменных имен nginx. Приведу доменные имена и их root в конфиге nginx
site.ru - root /var/www/site;
admin.site.ru - root /var/www/admin;
panel.site.ru - root /var/www/panel;
login.site.ru - root /var/www/login;
также на этот сервер будут направлены другие доменные имена (мы не знаем заранее какие). Пусть для примера будет foo.ru.
Как сделать так, чтобы домены "смотрели" в директории:
foo.ru -> /var/www/site
admin.foo.ru -> /var/www/panel
login.foo.ru -> /var/www/login
и при этом явного редиректа не происходило (чтобы url в строке браузера не менялся). То есть, panel.site.ru и admin.foo.ru были идентичными.
  • Вопрос задан
  • 2542 просмотра
Пригласить эксперта
Ответы на вопрос 3
benbor
@benbor
Помог ответ - не забудь лайкнуть
nginx.org/ru/docs/http/server_names.html
в каждой секции server указывайте нужный Вам location
Ответ написан
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Не хотите для каждого делать, вот вам пример через переменные
server {
    server_name ~^(?:www\.)?(?P<host_wo_www>.+)$;
    server_name_in_redirect     off;
    resolver    127.0.0.1;
root /var/www/$host_wo_www;
Ответ написан
Комментировать
taliban
@taliban
php программист
server_name "~(?.*?)\.(?[-\w]+\.domain\.com)$";
дальше будет доступна переменная $subdomain, можете ей пользоваться при составлении пути, например:
set $root_path "/var/www/runashop2/$subdomain/pp2/public";
root $root_path;

Это выдраный кусок из нашего конфига и переделанный (дабы не светить лишнего), так что сходу может не заработать, но суть показана, используйте регулярки с именоваными параметрами, и затем используйте то что совпало в пути

nginx.org/en/docs/http/server_names.html#regex_names тут подробно все описано
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы