Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Хостинг Введение в веб-разработку

Теперь мы знаем, что из себя представляет статический сайт, то есть такой сайт, который построен только с применением HTML и CSS. Пришла пора разобраться с тем, как сделать его доступным в интернете.

Интернет — это глобальная сеть, объединяющая огромное число устройств. К устройствам относятся далеко не только стационарные компьютеры и ноутбуки, но также и мобильные устройства, камеры, различные электронные и бытовые приборы. Хотя все эти устройства совершенно разные, они без проблем общаются друг с другом с помощью единого языка. Таким языком в мире машин стал стек протоколов TCP/IP. Не вдаваясь в детали, скажем, что протокол — это правила, по которым происходит общение. При этом природа общающихся устройств не важна.

Главным элементом в TCP/IP является IP-адрес. В версии IPv4 он выглядит так: 10.123.23.1. Четыре числа, разделенные точкой. У всех устройств, подключенных к сети напрямую, этот адрес уникальный. Фактически, любой запрос в интернете всегда обращен к какому-то ip адресу, даже если вы этого не видите.

Современный мир помешался на Internet of Things (IoT). Статистика говорит о том, что количество устройств, подключенных к сети, превысило число персональных компьютеров, так же подключенных к интернету.

Среди компьютеров, подключенных к интернету, выделяется класс машин, которые выполняют роль серверов. Эти сервера, как правило, располагаются у хостеров, и именно они обслуживают многочисленные интернет сайты.

data center

Хостер — это компания, предоставляющая услугу, называемую хостинг, то есть ресурсы для размещения и обслуживания сайта в интернете. Хостинг бывает очень разным, начиная от уже полностью готовой среды, в которую заливается код сайта, до железных серверов, которыми можно и нужно управлять самостоятельно. Работает это обычно так: после регистрации на сайте хостера выбирается тариф, привязывается банковская карточка, и с вас списывается ежемесячная плата за обслуживание и дополнительные услуги. Взамен вы получаете доступ к вашим ресурсам, например, IP-адрес и пару логин/пароль для ssh- или ftp-доступа.

Важно понимать, что обычный хостинг (говорят, "shared") подходит не всем и не всегда. С одной стороны, он дёшев и не требует настройки, с другой - очень ограничен в ресурсах и возможностях, в том числе по конфигурации. Серьезные решения все же располагаются на виртуальных или железных серверах, предоставляемых теми же хостерами. Для самых сложных систем строят свои собственные дата-центры, к таким можно отнести Google или Facebook.

Важно, что shared хостинг, как правило, поддерживает очень ограниченный набор языков, чаще всего это PHP. Поэтому программисты вне PHP мира почти всегда предпочитают виртуальные сервера (VPS).

hosting

Если вам интересна эта тема, не забудьте посмотреть PaaS- (платформа как сервис) и IaaS- (инфраструктура как сервис) решения.

Рассмотрим последний элемент в нашей системе — домен. Откуда берется доменное имя, и как оно связано с местом, где расположен сайт?

Когда интернет только зарождался, у сайтов не было доменных имен. Для обращения к сайту использовались прямые IP-адреса машин (серверов), например, 10.132.234.4 (вместо понятного hexlet.io). Довольно быстро стало понятно, что это слишком сложно для запоминания. К тому же адреса могли меняться. Нужно было что-то вроде записной книжки для адресов.

Первым решением стал специальный файл hosts, расположенный на каждой машине с которой происходил доступ к сайтам. Он содержит сопоставление между ip-адресом и именем, удобным для запоминания. Этот файлик существует до сих пор и часто используется программистами во время разработки. Формат файла:

# Формат файла: <ip-адрес> <имена сайта>
123.12.43.12 hexlet.io
172.10.11.200 facebook.com m.facebook.com

Когда происходит запрос по адресу, например, hexlet.io, то сначала проверяется файл hosts, и если домен найден (как в примере выше), то браузер устанавливает соединение с сервером. В нашем примере он пойдет по адресу 123.12.43.12.

Довольно быстро стало понятно, что такой подход очень неэффективен. В каждой подсети использовался собственный файлик hosts, который рассылался на все компьютеры, входящие в подсеть. Кроме того, если появляется новый сайт, то всех нужно оповестить. Да и самих сайтов становилось слишком много. Для решения этих проблем создали Domain Name System (DNS). Основное предназначение этой системы заключается в сопоставлении имени домена конкретному IP-адресу, на котором находится сайт. Другими словами, любой сервис может обратиться к DNS и спросить «какой адрес у хоста hexlet.io?».

# Пример обращения к DNS с помощью утилиты host
~$ host facebook.com
facebook.com has address 31.13.72.36
facebook.com has IPv6 address 2a03:2880:f10a:83:face:b00c::25de
facebook.com mail is handled by 10 msgin.vvv.facebook.com.

Важно понимать, что DNS - это именно служба, а не конкретный сервер. Так как весь интернет зависит от стабильности работы этой системы, то в нее входит множество серверов по всему миру. Кроме того, DNS устроена таким образом, что нет центральной организации, управляющей этими серверами. Подробнее про DNS можно прочитать в вики

dns

Веб, по большей части, построен по клиент-серверной архитектуре. Это означает, что программы-клиенты делают запросы к программам-серверам. Например, браузер — это клиент, а программа, которая отвечает на запросы браузера и предоставляет содержимое сайта (например, HTML и CSS) — это сервер. Конкретно в случае сайтов он называется веб-сервер.

Когда браузер запрашивает сайт, то происходит так называемый HTTP-запрос. Это название связано с тем, что запрос идет по протоколу HTTP, с которым мы сталкиваемся в нашей жизни буквально каждый день. Прямо сейчас не так важно, как конкретно это происходит. Важно, что у браузера есть способ обратиться к веб-серверу и сказать, какой сайт нам нужен. А веб-сервер, в свою очередь, отдаёт сайт браузеру. Под «отдает сайт» можно понимать передачу HTML в виде текста, от веб-сервера в браузер.

И действительно, получив содержимое сайта в виде html, браузер проводит сложные манипуляции, результатом которых становится красивая картинка на экране.

Пример HTTP-запроса из терминала для любознательных:

 ~$ curl --verbose -k https://ru.hexlet.io

* Rebuilt URL to: https://ru.hexlet.io/
*   Trying 52.19.232.70...
* Connected to ru.hexlet.io (52.19.232.70) port 443 (#0)
* Server certificate: Lets Encrypt Authority X3
> GET / HTTP/1.1
> Host: ru.hexlet.io
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Cache-Control: max-age=0, private, must-revalidate
< Content-Type: text/html; charset=utf-8
< Date: Mon, 01 May 2017 16:54:12 GMT
< ETag: W/"d757ff03391838ff56a232570f683b5a"
< Content-Length: 28960
< Connection: keep-alive
<
<!DOCTYPE html>
<html>
<head>
// тут много много html

На собеседованиях программистов часто задают следующий вопрос: «что происходит после того, как вы нажимаете enter в поле с введенным адресом?»

На этот вопрос есть исчерпывающий ответ на гитхабе. Вкратце происходит следующее:

  • Браузер делает запрос к DNS-серверам, у которых узнает необходимый IP-адрес
  • Браузер устанавливает соединение с веб-сервером, который запущен по найденному адресу, используя протоколы TCP/IP
  • Браузер делает HTTP-запрос
  • Веб-сервер возвращает HTML страницу для указанного адреса
  • Браузер отрисовывает HTML

http

Попробуйте самостоятельно поэкспериментировать на этом сайте — whois.domaintools.com. Вбейте любой домен и изучите вывод.

Выдачей доменов занимаются организации, именуемые регистраторами. На их сайте вы можете подобрать незанятый домен и оплатить его. После этого каждый год необходимо продление, иначе он вновь станет свободным, и его смогут купить другие. Затем, прямо там же у регистратора, вы можете настроить DNS, например, указать адрес вашего хостинга (в реальности все чуть сложнее, сначала надо указать NS-сервера), на котором находится сайт. Спустя примерно сутки ваш сайт начнет открываться. Такой срок связан с тем, что информация о новой связке домен-адрес должна распространиться по всем DNS серверам по всему миру. Такая же история происходит и при изменении IP-адреса. Процесс может занять до суток.

Не следует путать регистраторов доменных имен и хостеров. Часто хостеры выступают как ресселеры и предлагают купить домены через себя, но, в общем случае, регистраторы — это отдельные компании, которые никак не связаны с хостингом.


Дополнительные материалы

  1. Что такое и как работает DNS

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»