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

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

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

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

7 ответов

Решение

Это часть протокола 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, которые позволяют серверу знать, к какому веб-сайту пытается обратиться пользователь, и что большинство современных веб-браузеров имеют эти расширения, так что, должно быть, слишком сильный.

Что-то, что все современные браузеры отправляют вместе с запросом, называется заголовком "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/ хоста.

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

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

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

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

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

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

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

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

Короче...

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

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

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

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

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

Другие вопросы по тегам