Что нужно для web сервера. Принципы функционирования веб-сервера
Веб-серверы: информация для начинающих
В этом материале мы поговорим о том, как работают веб-серверы, какие бывают виды веб-хостингов и что такое выделенные серверы.
Вступление
Веб-сервером называется специальная программа, обеспечивающая работу сайтов и прочих ресурсов, доступных по протоколу www. Основная функция web-сервера заключается в том, чтобы принимать запросы от пользователей, обрабатывать их и отправлять в ответ нужную страницу, картинку или другой файл. Мы часто делаем такие запросы, когда реализуем проекты, связанные с управлением какими-то вещами, например, в умном доме.
Существуют тысячи программ, реализующих данный функционал, но наибольшей популярностью пользуются три, названия которых вы наверняка слышали. Ниже цифры в процентах от всех сайтов в мире:
- NGINX – 29,2%;
- Apache – 29,07%;
- Microsoft IIS – 18,88%.
Указанные значения взяты из отчета британской аналитической компании Netcraft за июнь 2019 года. Следует отметить, что NGINX впервые обошёл Apache по популярности.
Как работает сервер?
Программа, выполняющая функции веб-сервера, запускается на аппаратном сервере. При этом на одной машине может быть запущено любое количество веб-серверов, взаимодействующих между собой или работающих полностью автономно. Каждый из них может обслуживать практически любое количество сайтов («потолок» зависит только от количества установленной памяти).
Взаимодействие браузера с сервером происходит по следующему сценарию:
- Пользователь вводит в адресную строку URL сайта.
- Браузер обращается к DNS-серверу интернет-провайдера и получает адрес удаленного сервера.
- Далее браузер отправляет запрос серверу.
- Веб-сервер обрабатывает полученный запрос, генерирует необходимую страницу и отправляет её обратно.
- Браузер отображает полученную страницу на экране.
Как видите, цепочка действий достаточно длинная, поэтому иногда процесс затягивается, что раздражает пользователей. Поэтому желательно выбирать хостинг, соответствующий сложности и возможностям его сайта.
Виды веб-хостинга
Для размещения сайтов в интернете обычно пользуются услугами хостинг-провайдеров. В зависимости от амбиций и масштабов проекта можно выбрать один из четырех вариантов:
- Обычный shared-хостинг. Это самый распространенный и доступный в финансовом плане вариант. Провайдер разместит ваш сайт на своем сервере по соседству с десятками других сайтов. Этого достаточно для полноценной работы web-ресурса, но скорость загрузки может быть невысокой, особенно в вечерние часы.
- Виртуальный сервер (VPS или VDS). Данный вариант в несколько раз дороже, но обеспечивает существенно большее быстродействие и гибкость настроек. Вы получаете в свое распоряжение аналог полноценного сервера, можете конфигурировать его на свое усмотрение и самостоятельно установить нужный web-сервер. Настраивать всё придётся самостоятельно, но это можно поручить фрилансеру или попросить помощи у технической поддержки провайдера.
- Выделенный сервер (Dedicated). Это уже полноценный аппаратный компьютер с выделенным подключением к сети. Всеми ресурсами вы распоряжаетесь единолично.
- Колокация (Colocation). Этот вариант обеспечивает наибольшую гибкость возможностей. Дата-центр предоставляет вам некоторое количество юнитов (слотов) в стандартной стойке с гарантированной подачей электроэнергии и подключением к интернету. А серверное оборудование вы покупаете и собираете самостоятельно.
Выделенные серверы
Остановимся на самом популярном виде серверов — выделенный или dedicated сервер. Разработанный проект оказался удачным и стал стремительно набирать обороты, или же вы только собираетесь запустить свой проект. В первом случае вы можете ощутить, что хостинга вам не хватает, во втором – вы все еще стоите перед выбором – хостинг или выделенный сервер.
Попробуем разобраться, в каких случаях необходимо покупать выделенный сервер.
Наличие выделенного сервера понадобится вам в том случае, если:
- Первое — у вас на сайте или проекте должно быть размещено очень много информации. Допустим, вы собрались сделать проект, которому нужно хранить очень много видео- или аудиозаписей. В этом случае можно даже не пытаться купить хостинг, потому что максимум, который там могут вам предложить, как правило, 10-20 Гб.
- Второе — высокая посещаемость сайта/проекта, допустим от 500-сот человек. При такой посещаемости выделенный сервер не роскошь, а необходимость.
- Третье — скорость потока единовременной передачи данных при «одновременной активности» на проекте превышает 2 секунды.
На термине «одновременная активность» давайте остановимся подробнее. Если не углубляться в технические термины, то это означает, что на сайте или проекте одновременно чем-то заняты не менее 5 человек. Они могут в один момент писать письма, проходить аторизацию, подгружать какие-либо приложения и т.д.
Это означает, что каждый из них одновременно взаимодействует с сервером. При такой нагрузке, если суммарное время запроса превышает 2 секунды, то вам прямая дорога к покупке выделенного сервера. Конечно же, провайдер, предоставляющий хостинг-услуги, скажет вам, что вы подключены к каналу в 100 mbps, но умолчит о том, что помимо вашого сайта к нем подключены еще 2-3 десятка таких же сайтов.
Исходя из этих соображений, можно сказать предельно просто — если ваш сайт начал грузиться очень медленно, то это повод рассмотреть возможные варианты приобретения выделенного сервера. Сервер не обязательно должен находиться на этом же хостинге, если хостинг не соответствует вашим запросам.
Виды выделенных серверов
Сервера бывают двух видов:
- физический,
- виртуальный.
Виртуальный сервер, это сервер который использует для своих нужд часть ресурсов физического. Покупая выделенный сервер, вы как-бы берете в аренду часть памяти и других ресурсов основного сервера.
Оптимальным вариантом будет установка физического сервера. Это отдельный компьютер, который даст максимум необходимых ресурсов, поскольку будет полностью принадлежать вам. Этот вариант подходит, если у вас есть место для установки еще одного компьютера и деньги на его покупку.
Стоимость же выделенного сервера полностью зависит от его параметров. Как пример, 60 условных единиц в месяц будет стоить сервер со следующими параметрами:
- AMD Athlon 64 X2 3400+ 2×1.8 ГГц,
- объем оперативной памяти 4 ГБ,
- объем жесткого диска 640 ГБ.
Неплохо было бы обратить внимание на тарифные планы. Оптимальным будет безлимитный трафик и канал со скоростью 100 mbps. Но если же такой скорости вам не хватает, есть варианты, где скорость будет повыше, но, как правило, трафик в таких планах лимитирован. Допустим, терабайт вам дается изначально, а все что сверх этих объемов оплачивается отдельно.
Также существуют тарифы, при которых и скорость 1 ГБ и трафик безлимитный, но за стоимость такого тарифа можно спокойно приобрести физический сервер.
На данный момент я уже 6 месяцев для своих проектов использую выделенный сервер, купленный в AdminVPS . Каких либо особенных достоинств он не имеет, однако у них достаточно демократичные цены и быстрая поддержка, и еще есть плюс для тех кто занимается созданием сайтов — есть возможность заказать сервер в других странах.
Часто может разочаровать факт того, что сайт или проект не стали работать быстрее, а скорость загрузки на хостинге аналогичная. Но здесь может быть ряд проблем с которыми так просто не разберешься. Мой сервер работает как часы и упал он только однажды, после выкладывания нового курса по PHP. Количество желающих загрузить его одномоментно превысило 1000 человек, а такого наплыва сервер не смог выдержать. Благо когда у вас выделенный сервак, то и ваши проблемы решаются очень быстро службой поддержки.
Построение невзламываемого веб-сервера
Давайте теперь поговорим о построении «невзламываемого» веб-сервера на основе систем на одном чипе.
Кого из сайто-строителей и владельцев интернет ресурсов не интересует построение невзламываемого веб-сервера? Да и владельцы многих проектов не хотели бы, чтобы кто-то получал доступ к информации на нем, тем более, если вы храните данные по своему умному дому или какие-то приложения по его управлению.
Любые системы регулярно взламываются хакерами. Противостоять этому при помощи сетевых экранов, антивирусных мониторов, непременно имеющих бреши в системах защиты, сложно и практически невозможно. При этом можно создать такой веб-сервер, который не будет иметь описанных недостатков.
Если отойти от стереотипов создания и настройки веб-серверов на основе отработанных решений и воспользоваться иными возможностями публикации информации в сети интернет, то можно добиться стойкости портала от взломов, практически на все 100%. Достаточно применить однокристальный компьютер или контроллер.
Пусть даже не на одном чипе с поддержкой интернет-протоколов передачи информации в ответ на стандартные запросы к веб-серверу. И взламывать такое «чудо техники» окажется бесполезным.
Реализация простого веб-сервера с помощью решений, специально предназначенных для подобных целей – передачи информации с датчиков в сеть интернет и есть тот конёк. Расширив функции веб-сервера до нужных масштабов легко дробиться нужных результатов. Компьютерные контроллеры легко подвергаются масштабированию за счёт:
- расширения оперативной памяти,
- производительности процессоров,
- объёмов хранения данных.
Поэтому мощность портала создаваемого на таком веб-сервере ограничивается только рамками способностей генерировать сумасшедшие идеи и воплощать их в жизнь.
Чтобы веб-сервера не могли одолеть и взломать хакеры у него не должно быть как таковых интерфейсов доступа к ресурсам внутреннего контролера через ту же сеть интернет. Это самое главное требование, которое сложно реализовать в обычных компьютерах даже серверной конфигурации. Поскольку операционные системы имеют недочёты и явные дыры в системах защиты, а через эти бреши и проникают щупальца программных модулей червей и шпионов, троянских программ и вирусов.
Однокристальные компьютеры и специальные контроллеры, предоставляющие HTTP-интерфейс внешнего доступа позволяет производить операции чтения по запросам к веб-серверу. Записать же информацию на веб-сервер и таким образом внедрить вирусные коды через исполняемые скрипты языков управления веб-контентом не представляется возможным. В этом главная суть реализации невзламываемого веб-сервера на основе специализированных контроллеров, как промышленного производства, так и ручного воплощения.
Принципы функционирования веб-сервера
В первой статье мне бы хотелось немного затронуть именно эту тему, так как очень важно знать механизмы работы инструмента (в нашем случае — веб-сервера), реализовывающего работу нашего сайта. Мы немного идеализируем веб-сервер, упустим некоторые тонкие технические нюансы, чтобы было проще понять суть. Постараюсь расписать как можно проще и доступнее 🙂
Помню, давно я думал, что Интернет сосредоточен в одном месте, представлял что-то типа лаборатории, где расположено большое количество аппаратуры, поддерживающей работу всего этого. Тогда я не мог оценить масштабы Глобальной сети и сложности ее структуры. В действительности же, Интернет — это абстрактное понятие, ресурсы Интернета разбросаны по оборудованию на всем земном шаре. Для связи этого оборудования между собой на огромных расстояниях придумали специальные алгоритмы и стандарты, в частности, протокол TCP/IP, на котором в настоящее время функционирует наш Интернет. Согласно этому стандарту, каждый компьютер, находящийся в Глобальной сети, имеет свой уникальный адрес — IP-адрес. IP-адрес представляет собой последовательность четырех чисел в диапазоне от 0 до 255, разделенных между собой точками (например, 92.166.31.18). Один компьютер может связаться с другим компьютером в сети, зная его IP-адрес. Но сказать “компьютер связался с компьютером” не совсем верно, так как связываются не сами компьютеры, а сетевые службы (программы, если хотите), выполняющиеся на них. Допустим, вы отправляете электронную почту дедушке, при этом ваша почтовая программа связывается с почтовым сервером для отправки письма.
На компьютере одновременно может работать несколько сетевых программ, поэтому помимо IP-адреса для связи протоколом TCP/IP предусмотрено дополнительно такое понятие как порт. Порт — это число в диапазоне от 1 до 65536. Таким образом, минимальным условием для связи одной сетевой программы с другой является наличие у первой IP-адреса и номера порта второй. Совокупность IP-адреса и порта принято записывать через двоеточие (например, 192.168.35.2:443).
Для установления связи первой программе задается номер порта и она начинает “ожидать” подключение второй. Второй программе указывается тот же самый номер порта и IP-адрес компьютера, на котором запущена первая программа. Связь двух программ напоминает звонок по сотовому телефону: Вася звонит Пете, Петя берет трубку и начинается разговор. При этом номер телефона — это совокупность IP-адреса и номера порта в нашем случае.
Программа, ожидающая подключение, называется сервером. Серверу при запуске указывается номер порта, часто говорят: “сервер слушает порт”. На компьютере не может быть запущено более одного сервера с одинаковым номером порта (иначе невозможно определить, к какому из серверов подключаться). Программа, устанавливающая соединение с сервером, называется клиентом. На клиентов не распространяется подобное ограничение (например, можно запустить два джаббер-клиента). Также к серверу могут подключаться несколько клиентов с разных компьютеров, если это поддерживает сам сервер.
Теперь давайте на основе этих поверхностных знаний определим, что такое веб-сервер. Во-первых, судя по названию, это сетевая программа, ожидающая и принимающая соединения (сервер). По умолчанию, веб-сервер “слушает” порт под номером 80. Веб-сервер поддерживает работу одновременно с несколькими клиентами (несколько человек одновременно могут просматривать сайт). Клиентом для веб-сервера выступает веб-браузер (Internet Explorer, Opera и так далее).
Таким образом, сайт функционирует за счет веб-сервера, который отправляет странички этого сайта клиентам, запрашивающих их у него. Для того, чтобы запросить страницу необходимо знать IP-адрес компьютера, на котором запущен веб-сервер с нужным нам сайтом. Но запоминать IP-адреса неудобно, поэтому придумали доменные имена, представляющие собой некую текстовую сущность (например, yandex.ru). Очевидно, что доменные имена более понятны и более легки в запоминании. Однако, протокол TCP/IP не в состоянии найти требуемый компьютер по доменному имени, поэтому его необходимо преобразовать в IP-адрес. Для этого служат DNS-сервера, на которых расположены таблицы соответствий доменных имен и IP-адресов. Допустим, когда мы вводим в адресной строке браузера домен yandex.ru, в первую очередь посылается запрос в DNS-сервер для определения IP-адреса данного домена. Когда адрес определен, браузер пытается связаться с веб-сервером по этому адресу и по стандартному порту под номером 80. Если соединение с веб-сервером установлено, браузер запрашивает у веб-сервера требуемую страницу сайта.
В принципе, веб-сервер можно настроить на работу и на другом порту, в таком случае в браузере при запросе страницы необходимо его указывать через двоеточие после доменного имени (например, site.ru:3182).
Каким же образом происходит запрос страницы сайта у веб-сервера браузером? Понятное дело, что для взаимодействия веб-сервера и браузера необходим “общий язык”, то есть некий стандарт, по которому формируются запросы и ответы. Этим стандартом служит протокол HTTP (HyperText Transfer Protocol). Этот протокол довольно прост, так как соответствует схеме “запрос-ответ”. Говоря другими словами, на каждый HTTP-запрос веб-браузера веб-сервер отвечает HTTP-ответом. По своей инициативе веб-сервер HTTP-пакеты не шлет (к тому же, зачастую, после завершения операции “запрос-ответ” сервер разрывает соединение с клиентом).
Давайте рассмотрим структуру HTTP-пакета. HTTP-запрос и HTTP-ответ состоят из двух блоков — блока заголовков (headers) и блока тела пакета. Эти блоки отделены друг от друга двумя символами перевода строк (то есть между заголовками и телом расположена пустая строка). В блоке заголовков расположены различные параметры пакета, блок тела содержит какие-либо данные. Второй блок может отсутствовать, то есть HTTP-пакет может состоять только из блока заголовков. Для примера выполним запрос главной страницы сайта ya.ru и рассмотрим HTTP-пакеты, участвовавшие в нем. При запросе главной страницы браузер Firefox отправил веб-серверу следующий HTTP-запрос:
В HTTP-запросе отсутствует блок данных (так как отсутствует пустая строка, которая бы отделяла заголовки от данных). Давайте рассмотрим представляющие для нас в данный момент интерес строки этого запроса. Во-первых, самая первая строка:
“GET” — тип запроса. Два наиболее распространенных типа запросов — это GET и POST. О них мы поговорим в одной из следующих статей или уроков. “/” указывает на то, что запрашивается главная страница сайта. В противном случае здесь указывается путь и имя запрашиваемой страницы или файла. “HTTP/1.1” — версия протокола HTTP.
Параметр Host содержит домен сайта, к которому происходит обращение.
User-Agent содержит информацию о клиенте: тип браузера, операционной системы и так далее. Остальные параметры в данный момент нас особо не интересуют.
На данный HTTP-запрос веб-сервер ответил следующим HTTP-ответом:
Пустая строка указывает на наличие блока данных (тела пакета). Как и в случае с HTTP-запросом рассмотрим наиболее важные строки полученного ответа. В первой строке указывается версия протокола HTTP (HTTP/1.1) и код результата. Код результата 200 означает, что запрос выполнен успешно. В описании протокола HTTP расписаны все коды результатов. С некоторыми из них, например, 403 и 404, мы познакомимся в будущем.
Параметр Server содержит название веб-сервера. В нашем случае мы имеем дело с веб-сервером nginx. Данный параметр может отсутствовать в HTTP-ответе, если администратор данного сервера по каким-либо причинам не желает оглашать эту информацию.
Content-Type содержит тип переданных данных и, если необходимо, их кодировку (charset). Также в заголовках часто содержится параметр Content-Length, содержащий размер переданных сервером данных в байтах. В блоке тела пакета содержится код запрошенной страницы.
Таким образом, мы познакомились с основными принципами функционирования веб-сервера, рассмотрели схему “запрос-ответ”. Очень полезно для веб-мастера как можно лучше знать протокол HTTP, ведь это основа функционирования сайта. В последующих статьях и уроках мы будем знакомиться с различными возможностями веб-сервера, не затронутыми в данной статье, и рассматривать, как они реализованы протоколом HTTP. А в первом уроке мы научимся сами устанавливать и настраивать веб-сервер.
Основы функционирования веб-приложений
Что такое веб-сервер?
Цель лекции: дать определение понятию “веб-сервер” и сформировать представление о работе этого механизма.
В предыдущей лекции мы разобрались с функционированием протокола HTTP. Теперь давайте рассмотрим, как работают инструменты, которые делают возможным описанные ранее взаимодействия. В основе функционирования веб-приложений лежит такое понятие как веб-сервер. Веб-сервер – это программа, которая принимает входящие HTTP-запросы, обрабатывает эти запросы, генерирует HTTP-ответ и отправляет его клиенту. Общий алгоритм работы веб-сервера можно представить следующим образом (зеленым цветом помечены действия, которые обрабатываются веб-сервером).
После того, как пользователь обратился к определенному ресурсу по протоколу HTTP, клиент (обычно браузер) формирует HTTP-запрос к веб-серверу. Обычно указывается символическое имя сервера (например, “http://www.microsoft.com”) – в этом случае браузер предварительно преобразует это имя в IP-адрес при помощи сервисов DNS. После этого по протоколу HTTP на веб-сервер отправляется сформированное HTTP-сообщение. В этом сообщении браузер указывает какой ресурс необходимо загрузить и всю дополнительную информацию. Задача веб-сервера – прослушивать определенный TCP-порт (обычно порт 80) и принимать все входящие HTTP-сообщения. Если входящие данные не соответствуют формату сообщения HTTP, то такой запрос игнорируется, а клиенту возвращается сообщение об ошибке.
В простейшем случае при поступлении HTTP-запроса веб-сервер должен считать содержимое запрашиваемого файла с жесткого диска, упаковать его содержимое в HTTP-ответ и отправить клиенту. В случае если требуемый файл не найден на жестком диске, то веб-сервер сгенерирует ошибку с указанием статусного кода 404 и отправит это сообщение клиенту. Такой вариант работы веб-сервера принято называть статическими сайтами. В этом случае на стороне сервера не запускается никакой программный код, кроме программного кода самого веб-сервера. Однако подобные сценарии работы все чаще оказываются непригодными, а им на смену приходят полноценные веб-приложения. Отличие таких приложений состоит в том, что HTML-документы и другие ресурсы не хранятся на сервере в виде неизменяемых данных. Вместо этого, на сервере хранится программный код, который способен сгенерировать эти данные в момент обработки запроса. Разумеется, некоторые ресурсы (такие как файлы каскадных стилей, изображения и т.д.) могут храниться как статическое содержимое, но основные страницы HTML генерируют в процессе обработки. В таком случае веб-сервер при обработке запроса HTTP должен обращаться к программному коду, который должен сгенерировать содержимое. С учетом вышесказанного алгоритм работы веб-сервера будет выглядеть следующим образом.
Одной из наиболее важных задач, которые решаются при построении веб-сервера является задача обеспечения масштабируемости (т.е. возможности увеличения количества обслуживаемых пользователей) и защищенности от внешних атак. Поскольку веб-сервер работает в открытой среде – глобальной сети Интернет – то зачастую доступ к нему может осуществляться откуда угодно. Это делает веб-сервер подверженным большим нагрузкам и потенциальным атакам. Наиболее распространенными атаками на веб-сервер является обращение к веб-серверу с большим количеством запросов и их высокой частотой. В этом случае веб-сервер не сможет быстро обрабатывать все запросы, а это может сказаться на производительности веб-сервера для настоящих пользователей. Особенно остро подобным атакам подвержены веб-сервера, на которых исполняется какой-то внешний программный код за исключением программного кода самого веб-сервера. Обычно для борьбы с подобными атаками блокируются все запросы, которые приходят с определенного IP-адреса. Кроме того, в подобных случаях следует позаботится об оптимизации программного кода приложения, например, использовать кэширование – в этом случае при обработке каждого запроса нагрузка на центральный процессор будет меньше, что может существенно усложнить задачу атакующим.
Нередко на одном и том же веб-сервере располагается множество независимых веб-сайтов. Более того, все эти веб-сайты используют один и тот же IP-адрес. Т.е. веб-сервер, имеющий только один IP-адрес может размещать внутри себя несколько веб-сайтов и при этом каждый такой веб-сайт будет ассоциирован с собственным адресом (например, на одном веб-сервере могут располагаться веб-сайты: “microsoft.com”, “gotdotnet.ru”, “techdays.ru” и т.д.). Каким образом это становится возможным? Такое явление называется виртуальным хостингом. Для того чтобы понять как это работает, давайте еще раз обратимся к процессу взаимодействия клиента и сервера. Браузер отправляет HTTP-запрос на IP-адрес веб-сервера, который ассоциирован с доменным именем. Разрешение IP-адреса происходит с помощью служб DNS. Однако, несмотря на то, что запрос отправляется, используя полученный IP-адрес, клиент указывает дополнительный HTTP-заголовок ” Host “, в котором определяется оригинальное имя веб-сайта. Благодаря этой информации веб-сервер может разграничить доступ к нескольким веб-сайтам и при этом использовать один и тот же IP-адрес. Это очень важный момент, поскольку если бы для каждого доменного имени приходилось бы регистрировать отдельный IP-адрес, то адресное пространство протокола IP (v.4) очень быстро бы закончилось, а стоимость размещения веб-сайта в глобальной сети Интернет была бы намного выше. Для того, чтобы было более понятно давайте рассмотрим работу виртуального хостинга на примере. Предположим, имеется веб-сервер с IP-адресом 85.51.210.22. На этом сервере размещено несколько веб-сайтов: mysite1.com, mysite2.com, mysite3.com. Сервера DNS настроены таким образом, что каждое из этих доменных имен указывает на единственный IP-адрес 85.51.219.22. Давайте посмотрим, какие HTTP-запросы браузер будет генерировать при обращении к каждому из сайтов. При обращении к сайту “mysite1.com” HTTP-запрос может выглядеть следующим образом.
При обращении к сайту “mysite2.com” HTTP-запрос будет выглядеть иначе.
При анализе HTTP-запросов хорошо видно, что HTTP-заголовок ” Host ” отличается в каждом из запросов. Таким образом, становится понятно, что веб-сервер анализирует этот заголовок и отправляет клиенту содержимое соответствующего сайта. Схематически этот процесс можно представить следующим образом.
Подобную схему виртуального хостинга использует большинство компаний, занимающихся размещением веб-сайтов в Интернет. Поскольку в этом случае на одном физическом сервере могут размещаться большое количество совершенно различных сайтов, то этот способ один из самых дешевых. Однако, в рамках виртуального хостинга обычно запрещено запускать различные службы и сервисы, а также существует ограничение по степени использования центрального процессора. Это означает, что в случае, когда веб-сайт потребляет слишком много серверных ресурсов, то владельцу сайта предлагается либо перейти на более дорогой тариф (с большим количеством выделенных ресурсов), либо при превышении допустимого порогового значения веб-сайт блокируется на некоторое время. Поскольку иногда от сервера требуется большое количество ресурсов или в рамках этого сервера необходимо запускать дополнительные приложения или службы, виртуальный хостинг можно использовать не всегда. В этом случае обычно арендуют выделенный сервер – физический или виртуальный. Однако, это более дорогой вид размещения веб-приложений в сети Интернет, поэтому зачастую используется именно виртуальный хостинг.
Как уже говорилось ранее, самый простой сценарий работы веб-сервера заключается в получении HTTP-запроса, его обработки, считывания нужного файла с жесткого диска, формирование HTTP-ответа и отправки его клиенту. Подобный сценарий является самым простым, однако, в реальности встречается все реже. Дело в том, что при подобном подходе, содержимое, которое передается клиенту, является статическим (т.е. не изменяется от запроса к запросу). Однако если требуется построить веб-приложение, то содержимое HTML-страницы, которое передается клиенту должно изменяться от различных внешних условий (параметров запроса, содержимого базы данных, времени обработки запроса, типа пользователя и т.д.). В этом случае требуется запускать внешний (по отношению к веб-серверу) программный код, реализующий логику веб-приложения. Этот код должен содержаться отдельно от программного кода самого веб-сервера, поскольку код приложения будет различным от одного приложения к другому, а веб-сервер будет один и тот же. Таким образом, программный код, обрабатывающий HTTP-запросы и генерирующий HTTP-ответы можно условно разделить на две части:
- программный код, реализующий служебные функции по взаимодействию через протокол HTTP (программный код самого веб-сервера);
- программный код, реализующий логику конкретного веб-приложения (бизнес-логика, обращение к СУБД и т.д.).
Поскольку программный код веб-приложения обычно упаковывается в отдельные модули и поставляется независимо, то требуются механизмы взаимодействия этих двух частей, т.е. интерфейс взаимодействия. В данном случае под интерфейсом взаимодействия понимается набор правил, по которым веб-сервер и приложение будут взаимодействовать друг с другом. Фактически, схема обработки запроса может выглядеть следующим образом.
Исторически сложилось так, что существует два главных типов интерфейс взаимодействия внешнего приложения и веб-сервера – CGI и ISAPI.
CGI (Common Gateway Interface) – наиболее ранний способ взаимодействия веб-сервера и веб-приложения. Основная идея, которая лежит в основе CGI заключается в том, что при поступлении очередного HTTP-запроса, веб-сервер инициирует создание нового процесса и передает ему все необходимые данные HTTP-запроса. После того, как этот процесс отработает, он завершается, передав при этом результат обратно веб-серверу. Поскольку веб-сервер и приложение – это разные процессы с точки зрения операционной системы, то для обмена информации между ними используются средства межпроцессного взаимодействия (IPC) – зачастую это переменные окружения, именованные каналы и т.д. Основным преимуществом CGI является то, что процесс веб-сервера и приложения изолированы друг от друга и в случае неполадок в веб-приложении, завершится с ошибкой именно процесс приложения, при этом процесс самого веб-сервера будет продолжать функционировать.
С другой стороны, необходимость создания каждый раз нового процесса влечет за собой дополнительные накладные расходы на создание процесса (создание процесса – дорогостоящая операция с точки зрения операционной системы) и передачи данных через границы процессов. Этот факт является серьезным недостатком и оказывает существенное влияние на масштабируемость веб-приложения (возможность обрабатывать большее количество поступающих запросов).
ISAPI (Internet Server API) – альтернативный способ взаимодействия веб-сервера и веб-приложения. В отличии от CGI, при взаимодействии в рамках интерфейса ISAPI, при поступлении очередного запроса, веб-сервер инициирует создание нового потока в рамках основного процесса, в котором работает веб-сервер. Поскольку с точки зрения операционной системы создание потока – это менее дорогостоящая операция, чем создание процесса, то такие приложения на практике оказываются более масштабируемыми. Кроме того, упрощается взаимодействие веб-сервера и веб-приложения, поскольку в этом случае используется единое адресное пространство в рамках операционной системы (поскольку весь код работает в одном и том же процессе). Однако, в случае серьезных неполадок в веб-приложении, которое взаимодействует с веб-сервером в рамках ISAPI, веб-сервер также потенциально подвергается риску быть завершенным. Поскольку веб-сервер и веб-приложение работают в одном и том же процессе, это действительно так. Поэтому разработчикам программного кода веб-сервера, поддерживающего ISAPI следует уделить этому вопросу особое внимание.
На сегодняшний день наиболее распространенным способом взаимодействия веб-сервера и веб-приложения является интерфейс ISAPI, поскольку обеспечивает наиболее оптимальные показатели по накладным расходам и масштабируемости. Однако, при работе нескольких веб-приложений на одном и том же веб-сервере, в этом случае существует потенциальная опасность влияния одного приложения на другое. Если говорить о компаниях, размещающих веб-приложения на своих серверах, то может случиться такая ситуация, что на одном и том же веб-сервере одновременно размещаются веб-сайты компаний-конкурентов. В этом случае теоретически одна из компаний может намеренно загрузить код, который будет завершать работу веб-сервера с ошибкой и, таким образом, все веб-сайты размещенные на этом веб-сервере окажутся недоступными. Для того, чтобы избежать подобной ситуации используется совмещенный подход – для каждого приложения может создаваться пул приложения (application pool), который представляет из себя отдельный процесс, в котором функционируют потоки для обработки входящих HTTP-запросов от пользователей. В этом случае, если какое-то из приложений будет содержать код, который завершает работу процесса с ошибкой, то будет завершаться процесс только этого приложения. Более того, каждый пул приложения содержит набор заранее созданных и подготовленных потоков. Это необходимо для того, чтобы не тратить время на создание потока в момент поступления входящего запроса. Такой набор заранее созданных потоков называется пулом потоков. Как правило, веб-сервер следит за каждым пулом приложения и если оно завершает свою работу с ошибкой, то веб-сервер перезапускает его процесс.
Кроме приведенных функций и механизмов веб-сервера, в его функции зачастую входят и сопутствующие дополнительные задачи. К этим задачам относится аутентфикация и авторизация пользователя, ведение серверного лога (для отладки работы веб-сервера), поддержка нескольких веб-сайтов на одном сервере (виртуальный хостинг), поддержка безопасных подключений по протоколу HTTPS и др. Эти функции в каждом конкретном случае зависят от реализации веб-сервера.
Что такое веб-сервер
28 ноября 2017 Опубликовано в разделах: Азбука терминов. 21394
Больше видео на нашем канале – изучайте интернет-маркетинг с SEMANTICA
Любой компьютер можно сделать сервером. Для этого нужно установить специальную оболочку.
Требования к технической части определяются количеством размещенных ресурсов и требованиями к скорости. Чем они больше, тем мощнее должен быть компьютер.
Чтобы было понятно, приведем аналогию. Вы заходите в библиотеку и просите выдать вам книгу. Библиотекарь находит нужную и передает вам. Библиотека — это сервер, в ней хранятся все данные. Библиотекарь — это оболочка, которая приняла запрос и направила ответ. Вы — клиент.
Можно отправить библиотекаря за дополнительной информацией – аналогично щелчку по ссылке. Разница в том, что один и тот же ресурс в интернете могут одновременно читать неограниченное число пользователей.
Обслуживание клиента производится по схожему принципу: приходя за книгой, мы можем задать вопрос библиотекарю (поисковая система) или заглянуть в указатель (ЯндексКаталог). Это помогает найти нужную информацию.
Что делает веб-сервер
Его главная задача – хранение информации. Страницы, файлы, изображения, текстовый контент.
Задачи:
- Получать запросы.
- Запускать программы на специальных языках программирования (серверных).
- Формировать веб страницы.
- Отправлять их назад пользователю.
- Защищать информацию.
- Проводить идентификацию посетителей.
- Вести журнал обращений.
- Обслуживать запросы других типов: mailto, FTP и т.д.
Чтобы понять, как работает веб-сервер, надо иметь представление о принципах передачи информации в сети. В основе лежат правила, называемые протоколами: любой URL начинается с указания типа (ftp, http://, https:// и пр.).
Hyper Text Transfer Protocol – протокол передачи гипертекста. Страницы сайта всегда имеют вид гипертекстового документа. Это конечный результат работы любой серверной или клиентской программы.
- Когда пользователь вводит адрес или нажимает ссылку, браузер передает запрос, кодируя информацию по этим правилам.
- Хост, к которому привязан этот адрес, запускает программы сервера. Каждая из них выполняет свои функции.
- Полученные данные расшифровываются, команды выполняются.
- Формируется гипертекст, кодируется и отправляется обратно.
- Браузер получает ответ, преобразовывает код в html и показывает на экране страницу.
Что нужно для веб-сервера
Нужна машина, которая будет обрабатывать все запросы. Оцените нагрузку, которую должен выдерживать сервер. Это зависит от количества посетителей: чем больше запросов, тем требуется большая мощность.
Есть специальные компании, которые предоставляют услуги хостинга. Сервер вы арендуете. Вам дается квота для размещения файлов сайта.
Но если у вас простенький сайт, то можно обойтись своими силами.
Когда решен вопрос с сервером, надо привязать к нему статический IP-адрес.
Сайт становится доступен на веб-сервере после того, как зарегистрировано доменное имя, выполнено преобразование адресов службой DNS — связывание IP-адреса (например, 111.111.111.111) и доменного имени (www.site.com).
Самые распространенные сервера
Далее мы рассмотрим популярные оболочки — системы управления серверами.
Apache
Это бесплатный, свободно распространяемый продукт, у которого есть масса преимуществ:
- Постоянная поддержка разработчиков.
- Модули для работы с серверными языками программирования PHP, Perl, Python, Ruby, ASP и т.д.
- Открытый код. Доработкой под свои нужды занимаются разные программисты. Например, русскоязычное сообщество адаптирует его к русской кодировке.
- Кроссплатформенность. Изначально был создан под Unix, но сейчас поддерживается Windows, Mac OS, BSD, Linux, OS/2 и Novell NetWare.
- Безопасность.
При инсталляции укажите имя вашего хоста, например, localhost. В папку htdocs, которая лежит внутри папки Apachex.x (где x.x – номер версии) скопируйте любую html-страницу. Или создайте ее в блокноте, введя любой текст и сохранив с расширением html.
Когда в папке появился файл, откройте браузер и наберите адрес: localhost://ИМЯ СТРАНИЦЫ.html. На экране появится ваш текст – страница открыта с сервера. Если вы увидели ошибку «Не удается получить доступ к сайту», значит не запущен Apache. Его значок находится в трее.
Нажмите на него и выберите «Play». После этого все заработает.
NGNIX
Доля работающих на нем активных площадок составляет 21,13% (исследования Netcraft). Его в основном используют крупные компании и профессиональные разработчики: Yandex, Mail.ru, Rambler и пр. NGNIX выдерживает огромную нагрузку посетителей, надежен, безопасен и продуман.
Распространяется свободно, но появились платные версии Plus, стоимость от 2,500 $.
Его известность обеспечена громким именем разработчика. Представляет собой набор веб служб и интегрирован с Windows. Родной платформой программирования является ASP.NET, но можно внедрить и альтернативу, например, РНР.
Для полноценного хостинга требуется установка серверной операционной системы от Microsoft – Windows Server. 6-я версия вообще не была предназначена для хостинга, полноценная поддержка началась в 7-й. Приобретается он автоматически вместе с операционной системой и зависит от ее характеристик.
Установочные пакеты
Для начинающих программистов и разработчиков создаются инструменты, которые позволяют в несколько кликов развернуть веб-сервер у себя на компьютере.
- OpenServer. Портативная среда разработки, включающая множество баз данных, языков программирования и их версий, а также дополнительные сервисы. Например, интерфейс работы с БД PhpMyAdmin. На сегодняшний день это самый популярный инсталляционный набор. Работает даже с флешки. Бесплатно скачивается на низкой скорости. За 100 рублей скорость увеличивается в разы.
- Xampp. Активно поддерживаемый пакет: Apache, Php, Perl, MariaDB и пр. Имеет панель управления. Скачивается бесплатно.
- Denwer. Очень удобный набор всех нужных инструментов, включающий Apache, PHP, MySQL, PhpMyAdmin. К сожалению, последняя версия включает устаревшие дистрибутивы. В целом для обучения подойдут и они. Судя по форуму проект больше не поддерживается.
– Опыт работы более 3х лет.
– Специально разработанные проекты.
– Отлаженные процессы.
Веб-сервер (Web Server): для чего он нужен, как устроен и как работает
Как правило, у рядового пользователя такие понятия, как «веб-сервер» или «хостинг», ассоциируются с чем-то абсолютно непонятным. Между тем, ничего сложного в этом вопросе нет. Попытаемся объяснить, что собой представляет web server, зачем он нужен и как работает, особо не вдаваясь в технические подробности, а, так сказать, на пальцах. Отдельно остановимся на вопросе о том, как создать и настроить такой сервер на домашнем компьютерном терминале или ноутбуке.
Что такое веб-сервер?
Самое главное в данном вопросе – понять, что сервер такого типа является не чем иным, как компьютером в интернете с соответствующим установленным программным обеспечением.
Но это абсолютно не значит, что в домашних условиях нельзя создать собственную конфигурацию. Поскольку у нас более распространенными являются операционные системы Windows, вопросы о том, как создать веб-сервер на Ubuntu (Linux), рассматриваться не будут.
Для чего нужны web-серверы?
На серверах этого типа в интернете хранится много информации. При этом те же антивирусы для обновления собственных баз данных обращаются именно к ним. Пользователь также имеет непосредственное отношение к таким серверам, оформляя запросы в браузере (поиск информации, обращение к какой-то странице и т. д.).
Вот и получается, что все страницы, присутствующие в интернете, хранятся именно на веб-серверах, к которым с одной стороны производится пользовательский запрос или обращение установленной программы, а с другой – выдается результат тем самым сервером, к которому производится попытка доступа.
Как это все работает?
Все пользователи привыкли, что для входа на какой-то ресурс в интернете (веб-страницу), на котором располагается информация определенного типа, в адресной строке просто вводится префикс www (или http) и последующее имя. Но никто не задумывается о том, каким образом web server понимает запрос и выдает результат.
На самом деле здесь нужно различать понятия сервера и клиента. В нашем случае страница, размещенная в интернете, сохранена именно на удаленном сервере. Пользовательский компьютер выступает в роли клиента, от которого и производится обращение.
Для доступа в интернет применяются программы, называемые веб-браузерами. Они переводят пользовательский запрос в цифровой код, распознаваемый веб-сервером. Сервер его обрабатывает и выдает ответ в соответствующем коде, а браузер уже преобразует миллионы нулей и единиц в нормальный вид с текстовой, графической, звуковой или видеоинформацией, которая размещается на странице.
Самые популярные web-серверы
Из всего серверного программного обеспечения, как считается, самыми распространенными являются Apache и Microsoft IIS. Первый является более популярным и в большей степени используется в UNIX-подобных системах, хотя и может устанавливаться в среду Windows. Кроме того, сервер Apache является абсолютно бесплатным программрным обеспечением и совместим практически со всеми известными операционными системами. Однако, как отмечается, предназначено это ПО в основном для профессиональных программистов и разработчиков.
Программный продукт от Microsoft рассчитан на среднестатистического пользователя, который установить и настроить такой веб-сервер для Windows сможет без дополнительной помощи квалифицированного специалиста.
Тем не менее, если исходить из официальной статистики, программное обеспечение Apache использует порядка 60% всех существующих серверов, поэтому вопрос установки и настройки начальной конфигурации рассмотрим именно на его примере.
Веб-сервер на домашнем компьютере: установка
Для инсталляции потребуется скачать специальный серверный пакет, сокращенно обозначаемый как WAMP, в который входит три основных компонента:
- Apache – программная оболочка сервера, которая может работать самостоятельно, но только в случае отсутствия на размещаемых страницах динамического контента.
- PHP – язык программирования, используемый надстройками для управления серверами с динамическим содержимым вроде WordPress, Joomla, Drupal.
- MySQL – унифицированная система управления базами данных, используемая, опять же, при создании сайтов с динамическим контентом.
Инсталляцию можно произвести из пакета WampServer. Для этого достаточно следовать указаниям «Мастера», который на одной из стадий предложит выбрать интернет-браузер, который будет использоваться по умолчанию.
Для этого нужно будет перейти в папку с исполняемым файлом браузера (если это не Internet Explorer, обычно она располагается в директории Program Files). Попутно сам браузер следует добавить в список исключений брэндмауэра Windows. На финишной стадии ставится галочка напротив пункта немедленного запуска, после чего в системном трее появится соответствующий значок, на который нужно нажать и изменю выбрать запуск локального хоста (localhost).
Если все сделано правильно, появится домашняя страница сервера. Далее будет предложено инсталлировать дополнительные компоненты (если этого не сделать, система выдаст ошибку). В основном инсталляция касается дополнительных надстроек, элементов и компонентов, которые будут использоваться сервером в дальнейшем.
Пример настройки и тестирования сервера
Настройка веб-сервера несколько сложнее. Сначала в меню системного трея выбирается переход в папку WWW (место хранения надстроек или файлов HTML). После этого прописать следующий текст в «Блокноте»:
HTTP протокол: основные правила Интернета, которые должен знать каждый веб-разработчик. Как браузер взаимодействует с сервером.
HTTP сервер или веб-сервер: назначение, функции и роль сервера в HTTP
- 28.05.2016
- HTTP протокол, Вопрос-ответ, Сервера и протоколы, Что такое?
- Один комментарий
Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжаем знакомиться с протоколом HTTP в рубрике Серверы и протоколы и ее разделе HTTP протокол. Давайте теперь посмотрим на HTTP сервера, которые у нас существуют. Вообще говоря, стандарт HTTP не делает строго разделения на сервер и клиент, зачастую бывает так, что приложение может являться одновременно и HTTP сервером и HTTP клиентом. Сразу скажу, что отдельно рассматривать HTTP клиенты мы не будем, так как я не вижу в этом практического смысла, потому что с клиентами, в отличие от HTTP серверов, вы сталкиваетесь каждый день.
HTTP сервер или веб-сервер
HTTP сервер или веб-сервер – это программа, которая понимает, что нужно клиенту и выдает ему ответы в виде HTML страниц, на которых может содержаться различная информация: изображения, тексты, скрипты, файлы, медиа данные (видео и аудио) и многое другое. HTTP сервер принимает HTTP запрос от клиента (клиентом может быть браузер, мобильный телефон, телевизор или электрочайник, если у него есть функция выхода в интернет) и дает ему HTTP ответ, хочу обратить ваше внимание на то, что в нагрузку к HTTP ответу не обязательно должен идти ответ в виде HTML страницы, данные могут быть и другими.
Разница между веб-сервером и HTTP сервером
Для дальнейшего понимания мне следует уточнить: что понятие веб-сервер намного более широкое, чем сервер HTTP. Веб-сервер – это программный комплекс, необходимый для поддержания работы веб-протоколов и непосредственно железо, на котором эти программы работают (физические сервера). HTTP сервер – это всего лишь одна программа, реализующая взаимодействие по протоколу HTTP. Но в рамках записей по HTTP протоколу, говоря веб-сервер, я буду понимать именно HTTP сервер.
Функции HTTP сервера. Функции веб-сервера
Рассмотрим основные функции, которые выполняет HTTP сервер:
- основной функцией является поддержка взаимодействия между компьютерами в сети по протоколу HTTP;
- HTTP сервер может вести свои журналы: ошибок, обращений пользователей и другие;
- шифрование данных (HTTP протокол не поддерживает шифрование, для этого есть протоколы SSL и TLS, вы можете прочитать про кодирование в HTTP и безопасность в HTTP);
- HTTP сервер должен уметь распределять нагрузку;
- сжимать содержимое ответов;
- HTTP сервер может быть конечным, а может быть транзитным, во втором случае его называют прокси;
- HTTP сервер должен уметь кэшировать;
- сервера HTTP версии 1.1 должны поддерживать постоянные HTTP соединения;
- сервера должны уметь управлять HTTP обсуждением;
- и многое другое.
Функции же веб-сервера в его исконном понятие гораздо шире. Например, веб-сервер AMPPS включает в себя сразу несколько различных серверов, приложений или серверных технологий, в том числе и HTTP сервер Apache, хотя функции Apache несколько шире, чем функции просто HTTP сервера. Пример еще одной сборки веб-сервера может быть Деневер, которая на данный момент уже сильно устарела.
Самые популярные HTTP и веб-серверы
Вообще, список функций веб-сервера или сервера HTTP зависит от программы, которая выполняет эти функции. Поэтому давайте перечислим самые популярные HTTP серверы:
- Apache – наиболее популярный и распространенный HTTP сервер, используется для Unix систем, но есть версии и для ОС семейства Windows. Данный HTTP сервер является свободным;
- ISS – веб-сервер от компании Microsoft, распространяется бесплатно с операционными система семейства Windows;
- nginx – свободный HTTP сервер, разрабатываемый российским программистом Игорем Сысоевым, стоит отметить, что многие крупные проекты использует веб-сервер Игоря Сысоева.
- Google Web Server – этот веб-сервер распространяется и поддерживается компанией Гугл, за основу они взяли HTTP сервер Apache и доработали его.
- Cherokee – свободный веб-сервер, особенность которого заключается в том, что управлять им можно только через веб-интерфейс.
Мы привели только самые популярные HTTP и веб-серверы, на самом деле их список гораздо шире. Но, сказать можно следующее: достаточно изучить протокол HTTP, чтобы понять, как настраивать любой из веб-серверов или достаточно, понять, как работает один HTTP сервер, чтобы работать с другими. Конечно, у каждого веб-сервера есть свои тонкости и особенности, которые может изучить путем опытов и экспериментов или из документации (а лучше совместить опыт и документацию), но в основе любого веб-сервера лежит HTTP протокол и любой сервер должен выполнять требования HTTP протокола, а HTTP ответы должны содержать все необходимы для передачи по HTTP параметры.