Как у вас есть один IP-адрес и много сайтов?

27

Как я могу получить его, если у меня есть один IP-адрес, который находится в Интернете, но много веб-имен? Например, когда хостинговая компания имеет общий IP-адрес, но я получаю неограниченное количество доменных имен (вместе со всеми остальными в этом поле).

У меня есть окно в Интернете, но я хочу указать на другую машину, на которой есть другой веб-сайт, когда кто-то печатает другой веб-сайт ... (он находится рядом с ним в другой коробке). Это все субдоминирование? Спасибо.

Я хостинговая компания

Джонни
источник

Ответы:

36

Это часть протокола HTTP 1.1.

В частности, протокол HTTP 1.1 включает в себя заголовок, называемый «host:», который указывает, к какому веб-сайту на конкретном сервере клиент пытается получить доступ.

Таким образом, если snoopy.net и woodstock.org совместно используют 192.0.32.10 и ваш браузер пытается получить контент из http://snoopy.net/doghouse конкретного http-запроса, он будет выглядеть так:

GET /doghouse HTTP/1.1
Host: snoopy.net

Если желаемым URL является http://woodstock.org/seedsзапрос будет выглядеть

GET /seeds HTTP/1.1
Host: woodstock.org

В обоих случаях между вашим компьютером и портом 80 сервера будет TCP-сокет. Сервер будет знать, как получить содержимое из /var/www/snoopy.net или /var/www/woodstock.org/ на основе заголовка Host.

Были бы другие заголовки для файлов cookie и другие вещи, такие как тип браузера и разрешенный контент, но именно заголовок «Host» - это то, что позволяет веб-серверу знать, какой виртуальный веб-сайт желателен.

Там больше в RFC2616 .

Именно поэтому сайты https * должны *** иметь собственный IP-адрес - обмен ключами ssl и проверка сертификата выполняются до транзакции http, поэтому сервер http не будет знать, выдать ли сертификат для «woodstock». org "или" snoopy.net ", когда он получает соединение https через порт 443 из 192.0.32.10.


редактировать

** в комментариях Grawity указывает, что в спецификации TLS есть расширения для SSL, которые позволяют серверу знать, к какому веб-сайту пытается обратиться пользователь, и что большинство современных веб-браузеров имеют эти расширения, так что, должно быть, слишком сильный.

Крис
источник
чтобы веб-сервер увидел этот заголовок и переместил его на правильный веб-сайт? Можете ли вы иметь несколько сайтов на одном и том же порту?
Джонни
1
Это именно то, для чего это. Один «сервер», такой как apache, имеет порт 80 192.0.32.10, который имеет много записей DNS, каждая из которых является «сайтом». Сервер знает, какой сайт нужен, основываясь на заголовке «host».
Крис
3
DNS настроен так, чтобы оба имени указывали на один и тот же IP-адрес, где сервер прослушивает. Сервер получает соединения с тем же IP-адресом и портом, но затем, когда браузер сообщает ему «Я хочу SiteA.com», он знает, что ему нужно выдавать содержимое, отличное от того, которое запрашивается для SiteB.com.
Массимо
2
Чтобы быть еще более ясным: два сайта различаются на уровне протокола HTTP, а не на уровне TCP / IP. Это как когда кто-то звонит в ваш офис и просит поговорить с Джоном или Сьюзен: номер телефона тот же, но его могут использовать несколько человек.
Массимо
1
Большинство веб-браузеров и серверов теперь поддерживают указание имени сервера TLS, что устраняет необходимость в одном IP-адресе для каждого сайта.
Гравитация
12

Что-то, что все современные браузеры отправляют вместе с запросом, называется заголовком «Host:».

Фактический запрос, который Firefox отправляет на эту страницу:

Ведущий: superuser.com
Пользователь-агент: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, * / *; q = 0,8
Accept-Language: en-us, en; q = 0,5
Accept-Encoding: gzip, выкачать
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Подключение: keep-alive

Как видите,

Ведущий: superuser.com
бит идентифицирует рассматриваемый сайт.

В IIS и Apache вы можете настроить виртуальные веб-сайты, которые принимают запросы только от определенной комбинации IP / хоста.

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

Джон Гитцен
источник
Следует также отметить, что вам нужно установить несколько записей DNS для вашего IP-адреса.
Тадеуш А. Кадлубовский
@Tadeusz: можно настроить DNS-записи с подстановочными знаками, так что это не является строго обязательным.
Джон Гитцен
6

Техника размещения нескольких доменов / поддоменов на одном IP-адресе / хосте называется виртуальными хостами . Запрос http get содержит имя домена, к которому относятся запросы, что позволяет веб-серверу сопоставить запрос с конкретным виртуальным доменом.

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

3dinfluence
источник
или вы можете использовать другие http-серверы на разных портах.
Chopper3
Да, это тоже вариант. Но люди не привыкли указывать порт при вводе URL-адреса, поэтому я бы зарезервировал это решение для нескольких ситуаций, таких как интерфейс администратора.
3dinfluence
3

Функция на вашем веб-сервере обычно называется «виртуальными хостами». Как только вы указываете записи DNS, чтобы они указывали на этот один IP-адрес (как указано в других ответах), сервер затем будет обслуживать разные сайты в зависимости от того, какой запрашиваемый хост.

Насколько указывает на другую коробку идет. Вы можете настроить перенаправления на большинстве веб-серверов, если ожидаете получить запрос первым. Если вы говорите о поддоменах, то все, что вам нужно сделать, это указать каждому из поддоменов свой IP-адрес.

то есть host.com -> IP 1, затем www.host.com -> IP 2 и mail.host.com -> IP 3

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

Возможно, вы найдете ServeFault лучше для этого вопроса.

Колин Ньюэлл
источник
1

Короче...

Один - Установите записи DNS для ваших различных доменов, чтобы все указывали на ваш ящик.

Два - Как описано другими, настройте свой веб-сервер (вы не говорите, какой), чтобы он соответствовал запрошенному имени хоста.

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

Garry
источник
0

Из вашего вопроса мне кажется, что у вас есть отдельный физический сервер для второго сайта. В этом случае вы не сможете использовать один IP-адрес для двух серверов. Вы можете либо: а) получить второй общедоступный IP-адрес для вашего второго хоста, либо б) настроить интеллектуальный прокси-сервер, который перенаправляет запросы на разные серверы вашей внутренней сети на основе заголовков хоста. Я почти уверен, что б) возможно, но я не имею ни малейшего представления о том, как это работает, поэтому вам придется спросить кого-то еще, пытаетесь ли вы это сделать.

Кэтрин Макиннес
источник
0

Если я правильно понял ваш вопрос, у вас есть два разных компьютера, использующих IP-адрес через NAT (преобразование сетевых адресов)? Если это так, вам нужно будет, чтобы один сайт прослушивал другой порт (не 80) - я не знаю хорошего способа, чтобы маршрутизатор отправлял запросы на другие компьютеры на основе метаданных HTTP «Host». Вам лучше просто получить второй IP-адрес для вашего второго сервера.

CarlF
источник