Веб-серверы содержат только один веб-сайт каждый?
Когда вы впервые начинаете изучать, как доменные имена, 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? Ознакомьтесь с полным обсуждением здесь.