Назад | Перейти на главную страницу

Возможно ли иметь несколько уровней поддоменов с DNS и Nginx?

Это кажется простым вопросом, но после некоторого поиска в Google я не могу найти ответ.

У меня есть промежуточный сервер, на котором я хотел бы максимально имитировать рабочий сервер. Скажем, я владею example.com и я решил, что хочу вести блог, используя blog.example.com. Я хотел бы иметь возможность подготовить блог, прежде чем отправлять его в производство, используя промежуточный адрес blog.stage.example.com. Я лучше сделаю это, чем куплю другой домен, например stage-example.com или используйте соглашения об именах, например blog-stage.example.com.

Очевидно, я бы хотел blog.stage.example.com чтобы указать на сервер, работающий в промежуточной среде (например, IP 1.1.1.1), и blog.example.com чтобы указать на сервер, работающий в производственной среде (например, IP 2.2.2.2).

Я использую Nginx для своего веб-сервера, а Gandi - в качестве хостинг-провайдера, где я управляю файлом зоны DNS.

Можно ли настроить мои доменные имена с многоуровневыми поддоменами? Или я придерживаюсь соглашения об именах, например, blog-stage.example.com? Или, может быть, есть лучший способ справиться с этим, о котором я не знаю?

Если возможно, как бы выглядел файл зоны DNS?

И, наконец, если это возможно, как бы выглядел файл конфигурации Nginx?

Ваши виртуальные хосты nginx будут выглядеть примерно так:

server {
  listen 1.1.1.1:80;
  server_name blog.stage.example.com;

[...]

}

server {
  listen 2.2.2.2:80;
  server_name blog.example.com;

[...]

}

Это предполагает, что вы можете назначить вашему веб-серверу два IP-адреса. При указанной выше конфигурации один виртуальный сервер будет связываться с 1.1.1.1:80 и отвечать на blog.stage.example.com, а другой сервер будет связываться с 2.2.2.2:80 и отвечать на blog.example.com. Настройка DNS будет зависеть от того, как управляется ваш DNS, но это должно быть выполнимо.

Правильный ответ приходит от @ sysadmin1138 и @cjc:

Конфигурация Nginx

Ваши виртуальные хосты nginx будут выглядеть примерно так:

server {
  listen 1.1.1.1:80;
  server_name blog.stage.example.com;

[...]

}

server {
  listen 2.2.2.2:80;
  server_name blog.example.com;

[...]

}

Это предполагает, что вы можете назначить своему веб-серверу два IP-адреса. При указанной выше конфигурации один виртуальный сервер будет связываться с 1.1.1.1:80 и отвечать на blog.stage.example.com, а другой сервер будет связываться с 2.2.2.2:80 и отвечать на blog.example.com. Настройка DNS будет зависеть от того, как управляется ваш DNS, но это должно быть выполнимо.

DNS

Поддомены и хостинг немного неопределенны, и вам лучше всего спросить их, поддерживают ли они что-то подобное. Вполне возможно определить запись A с несколькими метками. Например, вы можете поместить это в свою зону DNS для example.com:

blog.stage             1.1.1.2
      blog             1.1.1.1

И это может сработать. Bind DNS действительно поддерживает такие вещи, но позволяет ли вам это делать ваш хостинг-провайдер - совсем другое дело.

Лучше использовать что-нибудь помимо блога.

betablog              1.1.1.2
    blog              1.1.1.1

Поскольку это гораздо более вероятно, будет поддерживаться вашим провайдером.

Я недостаточно знаком с Nginx, чтобы предоставить для этого несколько примеров виртуальных хостов.

Поддомены и хостинг немного неопределенны, и вам лучше всего спросить их, поддерживают ли они что-то подобное. Вполне возможно определить запись A с несколькими метками. Например, вы можете поместить это в свою зону DNS для example.com:

blog.stage             1.1.1.2
      blog             1.1.1.1

И это может сработать. Bind DNS действительно поддерживает такие вещи, но позволяет ли вам это делать ваш хостинг-провайдер - совсем другое дело.

Лучше использовать что-нибудь помимо блога.

betablog              1.1.1.2
    blog              1.1.1.1

Поскольку это гораздо более вероятно, будет поддерживаться вашим провайдером.

Я недостаточно знаком с Nginx, чтобы предоставить для этого несколько примеров виртуальных хостов.