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