Домашняя » как » Веб-серверы содержат только один веб-сайт каждый?

    Веб-серверы содержат только один веб-сайт каждый?

    Когда вы впервые начинаете изучать, как доменные имена, IP-адреса, веб-серверы и веб-сайты подходят друг к другу и работают вместе, это может быть немного запутанным или подавляющим время от времени. Как все это работает так гладко? Сегодняшний пост SuperUser Q & A содержит ответы на вопросы любопытных читателей..

    Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..

    Фото любезно предоставлено Rosmarie Voegtli (Flickr).

    Вопрос

    Читатель SuperUser user3407319 хочет знать, содержит ли веб-сервер только один веб-сайт каждый:

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

    Веб-серверы содержат только один веб-сайт каждый, или они содержат больше?

    Ответ

    Участник SuperUser Боб имеет ответ для нас:

    По сути, браузер включает имя домена в запрос HTTP, поэтому веб-сервер знает, какой домен был запрошен, и может ответить соответствующим.

    HTTP-запросы

    Вот как происходит ваш типичный HTTP-запрос:

    1. Пользователь предоставляет URL-адрес в виде http: // host: port / path.

    2. Браузер извлекает часть URL-адреса узла (домена) и преобразует ее в IP-адрес (при необходимости) в процессе, известном как разрешение имен. Это преобразование может происходить через DNS, но это не обязательно (например, локальный файл hosts в распространенных операционных системах обходит DNS).

    3. Браузер открывает TCP-соединение с указанным портом или по умолчанию использует порт 80 для этого IP-адреса..

    4. Браузер отправляет HTTP-запрос. Для HTTP / 1.1 это выглядит так:

    Заголовок хоста является стандартным и требуется в HTTP / 1.1. Он не был указан в спецификации HTTP / 1.0, но некоторые серверы его поддерживают.

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

    • Запрашиваемый IP-адрес из сокета TCP (IP-адрес клиента также доступен, но он используется редко, а иногда и для блокировки / фильтрации).
    • Запрашиваемый порт из сокета TCP
    • Запрошенное имя хоста, указанное браузером в HTTP-запросе в заголовке хоста.
    • Запрашиваемый путь
    • Любые другие заголовки (куки и т. Д.)

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

    Это называется виртуальным хостом на основе имен в Apache-land, тогда как Nginx называет их именами серверов в блоках серверов, а IIS предпочитает виртуальный сервер..

    Как насчет HTTPS?

    HTTPS немного отличается. Все идентично до установления соединения TCP, но после этого должен быть установлен зашифрованный туннель TLS. Цель состоит в том, чтобы не пропускать информацию о запросе.

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

    Это представляет проблему. Как веб-сервер узнает, какой сертификат хоста / веб-сайта отправлять, если он должен сделать это до получения HTTP-запроса?

    Традиционно это решалось с помощью выделенного IP-адреса (или порта) для каждого веб-сайта, требующего HTTPS. Очевидно, это стало проблематичным, поскольку у нас заканчиваются адреса IPv4.

    Введите SNI (указание имени сервера). Браузер теперь передает имя хоста во время согласования TLS, поэтому веб-сервер имеет эту информацию достаточно рано, чтобы отправить правильный сертификат. На стороне веб-сервера конфигурация очень похожа на настройку виртуальных хостов HTTP..

    Недостатком является то, что имя хоста теперь передается в виде обычного текста перед шифрованием, и по существу это утечка информации. Обычно это считается приемлемым компромиссом, хотя, учитывая, что имя хоста обычно отображается в DNS-запросе, в любом случае.

    Что делать, если вы запрашиваете сайт только по IP-адресу?

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

    Этот веб-сайт по умолчанию может быть собственным независимым веб-сайтом (часто с сообщением об ошибке) или любым другим веб-сайтом на веб-сервере в зависимости от предпочтений администратора веб-сервера..


    Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.