Web серверы. Что такое веб сервер? Для чего нужен веб сервер? Функции веб сервера

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

Даже те, кто пока только мечтают о тысячах пользователей на своём сайте, наверняка задавались вопросом: “А сколько же пользователей мой сайт выдержит, если они зайдут одновременно?” Сразу вспоминается известное выражение “Хабраэффект” – явление отказа сайта, который оказался не готов к многочисленным переходам на него после появления в интернете ссылки.

Предположим, что сайт уже есть (или скоро будет): где же его разместить? Это должен быть классический хостинг или vps-сервер? Если vps, то какой и как его лучше настроить? А может быть вообще нет никакой разницы и проще выбрать то, что подешевле? В этой статье мы рассмотрим несколько вариантов и на практике убедимся, какой из них подойдёт лучше для нашего сайта.

Будем экспериментировать: ставить разные режимы работы сервера и замерять производительность. Нагрузку на сайт будем имитировать с помощью сервиса Loaddy.com. Там можно задать количество пользователей, нарастающий тип нагрузки и по графику будет видно, как сервер реагирует на них. Считается, что один пользователь генерирует примерно один запрос к сайту в течение 10 секунд. В качестве испытуемого сайта возьмем демонстрационный интернет-магазин на cms moguta. Он будет заполнен тестовыми «товарами», которые выводятся на главную страницу по нескольким критериям (то есть при формировании страницы идет работа с базой данных и т.п.). Так или иначе, это позволит сравнивать режимы между собой.

В качестве тестовой площадки создадим впс-сервер на ос Ubuntu. Конфигурация его будет . Будем считать, что именно такие серверы начального уровня создают в большинстве случаев для новых проектов. Тестовая версия интернет-магазина будет доступна по ip адресу http://130.193.44.219/

Еще пригодится классический хостинг, на который мы также зальем тот же самый интернет магазин, чтобы провести испытания. Вы можете пройти наш путь сами и провести такие же тесты на своем проекте!

Так как в большинстве случаев вместе с vps предлагается панель управления, основные изменения настроек будем производить в ней. На vps сервере нам доступно 3 режима его работы:

  • Apache;
  • Apache в режиме CGI;
  • Nginx + php-fpm (без Апача).
Но сначала проведем испытания на хостинге:

Классический недорогой хостинг

Ошибки появляются, когда количество посетителей превышает 50 чел. Хостинг перестаёт отдавать контент, при этом, если зайти в панель управления хостингом, то мы можем увидеть примерно следующее:

Ваш сайт подвергался ограничениям в течение последних 24 часов. Ресурсы процессора ограничивались для Вашего сайта. Вы достигали пределов по входным процессам (количеству одновременно запущенных PHP и CGI скриптов, заданий по расписанию и консольных сессий) 126 раз.
Что ж, понятно, хостинг есть хостинг, тем более недорогой. Можно, конечно, найти такой тариф, который будет предоставлять больше возможностей, но это всё нужно учитывать, каким-то образом узнавать точные данные ограничений, причем у каждого хостинг-провайдера.

VPS: Apache

Следующий на очереди – наш тестовый впс с режимом апач, который кстати предлагается по умолчанию, при установке панели управления ISP.

Проблемы начинаются, когда число пользователей переваливает за 90. Если мы зайдем на наш сервер по ssh и посмотрим в этот момент на список процессов по команде top, отсортированный с помощью Shift+M (по количеству потребляемой памяти), то увидим примерно такую картину:

Мы видим, что процесс apache2 разросся на много дочерних и они съели всю оперативку нашего vps сервера.

Здесь нужно сделать небольшую ремарку. Дело в том, что для сервера апач теоретически существует режим, который позволяет вместо этого большого числа дочерних процессов для каждого соединения создать несколько так называемых мультитредовых, каждый из которых обслуживал бы по нескольку соединений. Называется этот режим worker , в отличие от дефолтного prefork . Но установить его непросто, в панелях типа ISP это сделать невозможно, а если озадачиться и попытаться это осуществить через ssh, то выяснится, что для этого мало выключить prefork и включить worker, еще нужна тредобезопасная версия php. А если используются модули типа Zend или IonCube, то они тоже должны быть тредобезопасными. Да и вообще, официальный сайт PHP не рекомендует устанавливать этот режим.

VPS: CGI

Давайте посмотрим, что будет при использовании режима CGI. Для этого нужно в панели управления ISP разрешить использовать PHP в режиме CGI, это делается в разделе «Учетные записи – пользователи – настройки для пользователя».

Безрадостная картина получилась. Сервер отказывается выдавать контент уже при 55+ посетителях, оперативная память вся съедена процессами “php”. Далее идёт попытка восстановления работоспособности, но всё равно всё оканчивается практически 100% отказами.

VPS: Nginx + PHP-FPM

Настало время режима, в котором сервер Apache не используется вовсе, вместо него работает Nginx, а php обрабатывается модулем php-fpm. Если вы используете панель управления ISP, то необходимо разрешить этот режим для пользователя. Это также делается в разделе «Учетные записи – пользователи – настройки для пользователя». Также этот режим должен быть доступен в разделе «Настройки – Возможности – Веб-сервер(www)».

То, что нужно! 100% доступности, при этом скорость загрузки и время ответа сервера находятся на приемлемых уровнях, хоть и возрастают с ростом нагрузки. Тем не менее сервер справляется!

Посмотрим на таблицу процессов в момент максимальной нагрузки на сервер:

Мы видим, что у нас есть еще запас по доступной оперативной памяти. А дочерние процессы php-fpm7.0 не разрастаются в больших количествах, а ограничены 5-ю экземплярами, каждый из которых обслуживает несколько потоков.

Что ж, похоже «режим-победитель» определен. Давайте выясним, сколько же одновременных посетителей сможет обслужить наш сервер в таком режиме. Но перед этим сделаем небольшой «тюнинг». Во-первых, так как apache не используется при такой работе сервера, его можно вовсе отключить. Это сделаем в панели управления ISP в разделе «Система – Службы». Во-вторых, изменим немного принцип запуска процессов php-fpm. По умолчанию он динамический. Это значит, что дочерние процессы будут висеть в памяти даже когда они не нужны. При этом память не освобождается и со временем эти процессы могут разрастись больше чем нам бы хотелось. Поэтому предлагается установить режим “ondemand” – по требованию. И задать количество дочерних процессов и время таймаута для них.

Для этого нужно будет зайти на сервер по ssh и прописать эти настройки в конфигурационный файл php. Это удобно сделать в файле для пользователя, для которого был создан домен в ISP.

Обычно он находится в /etc/php/7.0/fpm/pool.d

Итак: sudo nano /etc/php/7.0/fpm/pool.d/www-root.conf

Видим там по умолчанию такие настройки:

Pm = dynamic pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_children = 5 pm.max_spare_servers = 5
Чтобы заработал режим ondemand, нужно заменить это на:
pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 10s
И перезапустить php-fpm командой

Sudo service php7.0-fpm restart
После этого процессы php-fpm7.0 будут создаваться по требованию (при наличии нагрузки), максимальное их количество будет =5, а после 10 секунд простоя процесс будет убиваться, освобождая оперативную память.

На всякий случай, запустим наш тест еще раз, чтобы убедиться, что вся эта самодеятельность не повлияла в худшую сторону на производительность сайта:

Теперь давайте запустим Loaddy с большим количеством посетителей, чтобы понять, сколько соединений способен выдержать наш сервер:

Радует то, что все запросы были обработаны, пусть и с большой задержкой, при большом их количестве в секунду. Время ответа сервера приближается к 10 секундам при количестве обращений 190+ Но давайте вспомним график режима apache, где 4 секунды ответа сервера мы получили уже при 80+ пользователях, тогда как в режиме php-fpm аналогичные лаги наблюдаются при 130 запросах, которые мы специально выделили курсором на графике выше.
А ведь это тот же самый VPS.

Таблица процессов top в конце испытания (при 200 пользователях):

Заметим, что после окончания тестирования, память, используемая pfp-fpm освободилась:

А значит наш сервер готов к новым нагрузкам.

Необходимо помнить, что сайт работает в режиме nginx+php-fpm, это означает что в работе не используется apache2 и как следствие – не используется.htaccess. Это может казаться не удобным, но это самый быстрый из возможных вариантов, а поисковики лучше ранжируют сайты, которые работают быстро.

Заключение

В завершении еще один небольшой момент: Если вы настроили на сервере всё что хотели и решили отключить панель управления ISP, или у вас кончилась на неё лицензия, учтите, что процесс “core” от неё так и останется висеть у вас на сервере. По прошествии месяцев он может разрастись, так что лучше его “убить” и удалить из автозапуска и crona.

Если хотите самостоятельно протестировать сайт с помощью Loaddy или же другими методами, он доступен по адресу

Если вы интересуетесь веб-разработкой, то, наверняка, вам встречалось такое определение как веб-сервер.

Что же такое веб-сервер?

Давайте попробуем разобраться в этом вопросе.

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

Для чего же нужна эта программа? Для чего нам нужен веб-сервер?

Основная задача веб-сервера - принимать HTTP-запросы, обрабатывать их и выдавать HTTP-ответы.

Что же это за HTTP-запросы и ответы?

Мы с этим сталкиваемся каждый день и самая главная программа, которая позволяет работать с HTTP-запросами и ответами - это обычный браузер, который установлен у нас в операционной системе (Google Chrome, Яндекс Браузер, Firefox, Internet Explorer и.т.д.).

Т.е. запросы к веб-серверу и ответы от него, которые происходят по протоколу HTTP. Это специальный набор правил, которые позволяют общаться браузеру и веб-серверу.

Наверняка, вы могли обращать внимание, что при наборе какой-то адреса в адресную строку браузера. Перед доменом сайта, первым делом указывается протокол, по которому работает веб-сайт. Либо http, либо https.

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

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

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

Веб-сервер - это такая программа, которая является связующим звеном с серверными технологиями.

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

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

Нужно иметь в виду, что база данных - это отдельная технология (программа) и она не относится к веб-серверу.

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

Нужно понимать, что HTTP-запросы мы можем делать не только с браузера. Это можно делать через командную строку, через определенные серверные приложения, и.т.д.

Кроме того, задача веб-сервера создавать журнал ошибок и обращений к файлам (лог).

Следующая веб-сервера - это аутентификация и авторизация пользователей. Веб-сервер позволяет определять кто к нему обращается, имеет ли он доступ к каким-либо файлам.

Если веб-сервер не имеет доступа к каким-либо файлам, то веб-сервер просто запрещает доступ к этим файлам.

Также веб-сервер содержит в себе настройки о том, как и какие файлы нужно обрабатывать на веб-сервере. Что нужно сделать с какой-либо папкой. В общем, эти все правила содержит веб-сервер.

Т.к. веб-сервер это обычная программа, то эту программу могут выпускать различные разработчики. Т.е. разные компании могут по своим алгоритмам разрабатывать веб-сервера, которые тем или иным образом работают.

Пожалуй, самыми популярными веб-серверами, которые имеются на текущий день являются такие веб-сервера как: Apache, IIS, Nginx.

Вот, собственно говоря, и все по поводу веб-серверов. Самое главное, что нужно понять, не вдаваясь в детали. Веб-сервер - это просто некая программа, которая позволяет принимать HTTP-запросы и выдавать HTTP-ответы.

Веб-сервер - это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными. Веб-серверы - основа Всемирной паутины.

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

Клиент, которым обычно является веб-браузер, передаёт веб-серверу запросы на получение ресурсов, обозначенных URL-адресами. Ресурсы - это HTML-страницы, изображения, файлы, медиа-потоки или другие данные, которые необходимы клиенту. В ответ веб-сервер передаёт клиенту запрошенные данные. Этот обмен происходит по протоколу HTTP.

Основное действие конечного пользователя в Интернете – это "переход на Web-страницу". На самом общем уровне это предполагает совместную работу пары приложений:

Web-браузера, такого как Firefox или Internet Explorer, который показывает в удобной для человеческого восприятия форме запрашиваемую страницу, которую он получает от…

Web-сервера, находящегося, как правило, на удалённой машине, который отвечает на запрос страницы потоком данных в формате HTML или аналогичном.

С браузерами имеют дело пользователи, которые подходят к их выбору и анализу с надлежащей тщательностью. Напротив, серверы видны только техническому персоналу сайтов. Более того, хотя существует множество различных Web-серверов, около 90% всех сайтов, согласно недавним исследованиям Netcraft, работают всего на двух из них - Apache и Internet Information Server (IIS). Оба эти сервера – тщательно проработанные продукты, обладающие не только очень длинным списком встроенных возможностей, но и процветающим "вторичным рынком" книг, дополнений, консультаций, провайдеров и т.д.

Web-сервер оценивается по целому ряду важнейших параметров:

Эффективность: как быстро он отвечает на запрос?

Масштабируемость: продолжает ли сервер работать надёжно, когда к нему одновременно обращаются много пользователей?

Безопасность: совершает ли сервер только те операции, которые должен? Какие возможности он предлагает для аутентификации пользователей и шифрования потока обмена информацией? Делает ли его использование более уязвимыми соседние приложения или хосты?

Работоспособность: какие у сервера режимы отказа и аварийные ситуации?

Соответствие стандартам.

Гибкость: можно ли настроить сервер для принятия большого количества запросов или динамических страниц, требующих значительных вычислений, или сложной аутентификации, или...?

Требования к платформе: на каких платформах возможно использование сервера? Предъявляет ли он особые требования к аппаратной платформе?


Управляемость: легко ли установить и обслуживать сервер? Совместим ли он с организационными стандартами по ведению журналов, аудиту, оценке затрат и т.д.?

Известные веб-серверы:

· Apache - свободный веб-сервер, наиболее часто используемый в UNIX-подобных операционных системах;

· IIS от компании Microsoft, распространяемый с серверными ОС семейства Windows

· nginx - свободный веб-сервер,

· lighttpd - свободный веб-сервер.

· Google Web Server - веб-сервер, основанный на Apache и доработанный компанией Google.

· Resin - свободный веб-сервер приложений.

· Cherokee - свободный веб-сервер, управляемый только через web-интерфейс.

· Rootage - веб-сервер, написанный на java.

· THTTPD - простой, маленький, быстрый и безопасный веб-сервер.

«Лёгкие» Web-сервера

Обычно «лёгкий» подразумевает простой, легко инсталлируемый, хорошо налаженный, нетребовательный и устойчивый – меньшего размера и менее сложный, чем Apache и IIS, которые в попытке удовлетворить свой большой рынок превратились в довольно громоздкие конструкции.

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

Маленькие лёгкие Web-серверы также неплохо работают на промышленных компьютерах в удалённых системах, в жёстких условиях или в условиях недостаточного электропитания. В этих ситуациях большим преимуществом является возможность обрабатывать Web-страницы каким-то приложением, которое не требует большой производительности или пространства на диске; это значит, что удаленные машины могут иметь встроенные доступные через Web управляющие консоли, без сложностей разработки и накладных расходов, характерных для Apache.

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

· YouTube использует lighttpd для быстрой доставки архивированного контента, например, видео;

· cdServe работает на CD-дисках "German Woodworking Machinery and Tools";

· LiteSpeed «отметился» в twitter, www.funnyoride.com, www.airliners.com, WordPress.com, fanfiction.com, SlashGear, www.forumactif.com и в других заметных Web-сайтах;

· OpenSUSE, RubyOnRails, MarkaBoo и несколько других заметных сайтов опираются на Mongrel;

· thttpd работает на ht.com, mtv.com, The Drudge Report, garfield.com и др.

Лёгкие серверы играют свою роль даже в реальных вычислительных центрах, включая перечисленные выше солидные сайты и не только их. Особо высокопроизводительные сайты сегментируют свои операции, чтобы извлечь максимальную выгоду из кэширования, прокси-серверов и т.д. Сайт на основе Apache, к примеру, может иметь архитектуру, в которой медленно изменяющиеся изображения доставляются посредством «минималистского» Web-сервера из выделенной файловой системы. То, что видит в действительности конечный пользователь – это результат командной работы Apache и одного или нескольких дополнительных Web-серверов, каждый из которых играет роль, в которой он превосходит остальных. Такая конструкция может дать очень быстрые результаты с минимальными затратами на вычисления.

Хотя имеют много общего, внутри данной категории есть и различия. Большинство «лёгких» Web-серверов написаны на C, но есть и ряд успешных реализаций на других языках, в том числе на Erlang, Java, Lisp, Lua, Perl, Python и Tcl.

Все лёгкие Web-серверы меньше и конфигурируются легче, чем Apache. Некоторые из них быстрее, чем Apache, некоторые намного быстрее; в других упор сделан на безопасность, бесперебойную работу при больших загрузках, расширяемость или экономию памяти. В любом случае в них можно полностью разобраться, что уже нереально для Apache.

К числу очень маленьких Web-серверов относятся:

· Cheetah Server , содержащий менее тысячи строк на C.

· DustMote , очень маленький Web-сервер, реализованный в одном Tcl-исходнике размером примерно 3000 байт.

· fnord занимает менее 20K, в зависимости от платформы и конфигурации. Несмотря на маленький размер, он поддерживает виртуальный хостинг, CGI и keep-alive.

· ihttpd , имея менее 800 строчек C, умеет обслуживать страницы, включая CGI, посредством inetd.

· mattows поддерживает CGI, насчитывая при этом всего лишь 600 строк на C.

· Scrinchy , несмотря на маленький размер - около 30 KB - поддерживает примечательно много языков сценариев, включая специализированный стековый язык под названием Sy.

Маленький размер не препятствует серьёзному использованию этих серверов; fnord, например, обслуживает тысячи одновременных соединений.

· cghttpd – минимальный Web-сервер, который можно рассматривать как эксперимент по использованию асинхронных средств, доступных в ядрах Linux серии 2.6.

· darkhttpd – быстрый однопоточный сервер HTTP/1.1.

· Gatling специально разработан для высокой производительности. Поддерживает FTP, IPv6, виртуальный хостинг, CGI и т.п.

· Kernux – модуль ядра Linux, который обеспечивает выполнение HTTP-демона.

· lighttpd – пятый по популярности Web-сервер в мире. Он оптимизирован под большое количество одновременных соединений: Типичный сценарий – использование lighttpd как сервера, разгружающего основной сервер, для выдачи статического контента...

· LiteSpeed Web Server – коммерческий лёгкий Web-сервер, в котором особый упор сделан на производительность и безопасность. LiteSpeed Technologies Inc. заявляет об ускорении в шесть раз для статического контента и несколько более скромных показателях для интерпретируемых страниц.

· Miniature JWS , известный также как tjws - написанный на Java Web-сервер, который обрабатывает сервлеты, JSP и тысячи параллельных соединений, занимая 77 килобайт. Его автор характеризует его так: "на 10% быстрее, чем Apache 2.x."

· Yaws – высокопроизводительный сервер HTTP/1.1, написанный на Erlang.

Многие Web-серверы реализованы как классы или библиотеки, разработанные для встраивания в большие приложения. Среди них особенно интересны:

· EHS – "встраиваемый HTTP сервер," класс C++, разработанный для встраивания в большие C++ приложения; и

· Embedded TCL Web Server , простейший Web-сервер, поддерживающий SSL и Basic Authentication и при этом фантастически быстрый – по замерам автора, не менее быстрый, чем lighttpd и AOLserver. Содержит меньше сотни строк Tcl.

На языке Python реализованы несколько Web-серверов, которые заполняют необычные ниши, в том числе:

· cdServer - маленький простой http-сервер на Python, "разработанный для выдачи (статического) контента с CD-ROM". Имеет ограниченные возможности в обслуживании динамического контента. У нас есть несколько проектов, которые включают доставку непортящихся "live CD", и инструменты типа cdServer являются для них критическими.

· edna – остроумный MP3-сервер на Python, основанный на HTTP.

Есть и другие интересные лёгкие Web-серверы, реализованные на Perl и на других, не так хорошо известных, языках:

· Camlserv – полный Web-сервер, написанный на ocaml и нацеленный на "высокоинтерактивные Web-страницы". Умещается в нескольких тысячах строчек ocaml, большинство из которых посвящено специальным возможностям работы с MySQL и HTML.

· dhttpd протоколирует обращения в том же формате, что и Apache. Имеет встроенный Perl-интерпретатор для поддержки CGI, виртуальный хостинг, IPv6, управление пропускной способностью и возможности безопасности.

· DNHTTPD написан на Perl для UNIX. Он поддерживает виртуальные хосты, SSL соединения, CGI и другое.

· Jellybean – написанный на Perl сервер Perl Object Server, основанный на HTTP.

· lns.http – общая Web-среда на LISP HTTP/1.1.

· Mongrel – библиотека и сервер для HTTP, написанные на Ruby.

· Nanoweb – быстрый, устойчивый Web-сервер, написанный на PHP. Имеет обширный список возможностей, включая полное соответствие HTTP/1.1, контроль обращений, аутентификацию, виртуальный хостинг, SSL совместимость и т.д.

· Naridesh – написанный на Perl Web-сервер.

· OpenAngel – написан на Perl. Безопасность.

· Xavante – HTTP/1.1 Web-сервер, написанный на Lua.

· XSP написан на C# и выполняет роль ведущего узла ASP.NET.

Мир Web-серверов состоит не только из Apache и IIS, их гораздо больше. В вашем распоряжении широкий выбор альтернативных решений – настолько маленьких, что их можно полностью понять, и при этом достаточно быстрых для серьёзных приложений.

Инструкция

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

Когда на веб-сервере создается сайт, то ему присваивается IP-адрес. IP – аббревиатура, «интернет-протокол». IP-адрес состоит из десяти цифр с точками (например, 127.21.61.137). Для того чтобы сделать запрос у веб-сервера о том или ином сайте, браузер на компьютере сначала должен узнать IP-адрес этого сайта. Если этой информации нет в кэше браузера, то он делает соответствующий запрос у DNS-сервера через интернет.

Затем DNS-сервер сообщает браузеру, по какому IP-адресу расположен данный сайт. После этого браузер запрашивает URL-адрес сайта у веб-сервера. Сервер откликается, отправляя запрашиваемую страницу. Если этой страницы не существует, сервер отправляет сообщение об ошибке. Браузер получает сообщение и отображает его.

В профессиональной сфере в такой ситуации браузер называют «клиент», а веб-сервер - «сервер». Также эти понятия относятся к компьютерам. Те компьютеры, которые выступают в качестве веб-серверов, называются серверы, а те, которые подключаются к интернету, чтобы получить информацию – клиенты.

Веб-сервер обычно содержит информацию о более чем одном сайте. Многие хостинговые компании предоставляют место сотням и даже тысячам веб-сайтам на одном веб-сервере. Каждому веб-сайту обычно приписывается свой уникальный IP-адрес. Этот адрес расшифровывается DNS-сервером с целью получения доменного имени.

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

Каждый компьютер-сервер предоставляет доступ к хранящейся на нем информации, используя пронумерованные порты. У каждой предоставляемой сервером услуги (электронная почта, хостинг) имеется свой отдельный порт. Клиенты подключаются к услуге через IP-адрес и через порт.

Когда клиент соединяется с сервером через порт, он пользуется протоколом. Протокол представляет собой текст, показывающий, каким образом клиент и сервер будут взаимодействовать.

Каждый веб-сервер согласуется с протоколом HTTP. Самая элементарная форма взаимодействия, понимаемая сервером HTTP, содержит всего одну команду: «Получить». Первоначально протокол ограничивался тем, что сервер отправлял клиенту запрашиваемый файл и отключался. Позднее протокол был усовершенствован, и клиенту стал отсылаться весь URL.

Когда пользователь печатает в строке браузера название ссылки URL, то браузер разбивает название на три части: протокол, название сервера, название файла. Браузер получает информацию об IP-адресе сайта через название сервера, и с его помощью подключается к компьютеру-серверу. Затем браузер соединяется с веб-сервером по этому IP-адресу через порт. Следуя протоколу, браузер посылает серверу команду «Получить». Сервер отправляет текст в формате HTML на веб-страницу. Браузер считывает HTML- тэги и форматирует страницу для экрана компьютера-клиента.

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

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

Если Вы напечатаете в адресной строке вашего браузера http://www.сайт/how-web-server-work/ и нажмете клавишу Enter - эта страничка нашего Веб-сайта появится на экране.

На самом базовом уровне произошло следующее: Ваш браузер сформировал подключение к Веб-серверу, отправил запрос на получение Веб-страницы страницы и получил ее.

Теперь немного подробнее:

URL состоит из трех частей:

1. Протокола (http)

2. Имени сервера (www.сайт)

3. Адреса страницы (how-web-server-work)

Браузер обращается к серверу доменных имен, чтобы перевести имя сайта www.сайт в IP-адрес , который он использует, чтобы подключиться к серверной машине. Браузер затем образует соединение с Веб-сервером по указанному IP-адресу на порт 80 или любой другой, если так задумано (Мы обсудим порты позже в этой статье).

Следуя протоколу HTTP, браузер послал запрос на сервер, запрашивая файл http://www.сайт/how-web-server-work/

Обратите внимание, что файлы cookie также могут быть отправлены от браузера к серверу.

В ответ сервер сгенерировал динамическую Веб-страницу и послал обратно HTML текст для отображения этой страницы в Вашем браузере. Файлы cookie также могут быть отправлены от сервера к браузеру в заголовке страницы. Браузер читает HTML-теги и формирует вывод Веб-страницы на экране.

Интернет

Так что же такое «Интернет»? Интернет представляет собой сотни миллионов компьютеров, связанные вместе в компьютерную сеть . Сеть позволяет всем компьютерам взаимодействовать друг с другом. Домашний компьютер может быть связан с сетью Интернет при помощи самых разных способов и устройств – начиная с примитивного модема для телефонной линии, закачивая соединением по локальной сети (LAN ) с Интернет-провайдером (ISP ).

Крупные Интернет-провайдеры поддерживают волоконно-оптические линии для всей страны или региона. Магистральные сети проложены во всем мире, соединенные по волоконно-оптическим линиям, подводным кабелям или спутниковым каналам. Таким образом, каждый компьютер в сети Интернет подключен к любому другому компьютеру в сети Интернет.

Клиенты и Серверы

В общем, все компьютеры в Интернет, можно разделить на две категории: серверы и клиенты. Компьютеры, обеспечивающие сервисы (такие как Веб-серверы, серверы FTP, облачные сервисы) для других машин являются серверами . Машины, которые используются для подключения к этим услугам — клиенты . При подключении к Google , чтобы выполнить поисковый запрос или воспользоваться каким-либо его сервисом, Google предоставляет свой компьютер (возможно, целый кластер мощных компьютеров) для обслуживания Вашего запроса. Таким образом, Google предоставляет сервер. Ваша машина тоже может предоставлять услуги кому-то в Интернете. Таким образом, пользовательская машина, обычно, является клиентом, хотя может становиться и сервером, в случае необходимости.

Сервер может предоставить одну или несколько услуг в Интернете. Например, на компьютере-сервере может быть установлено программное обеспечение, позволяющее ему выступать в качестве Веб-сервера, e-mail сервера и FTP сервера. Компьютеры-клиенты, которые присоединяются к серверу, направляют свои запросы к специальному программному обеспечению, работающему на общем компьютере-сервере. Например, если вы используете Веб-браузер на вашем компьютере, он будет «общаться» с Веб-сервером на компьютере-сервере. Ваше e-mail приложение будет «говорить» с сервером электронной почты, и так далее.

IP-адреса

Чтобы соединить все эти машины в сеть, у каждого компьютера в Интернете есть уникальный адрес, называемый IP-адрес . Типичный IP-адрес выглядит так:

Четыре числа в IP-адресе называются октеты потому что они могут принимать значения между 0 и 255 или 2 8 вариантов значений.

Каждый компьютер в Интернет имеет свой уникальный IP-адрес. Сервер имеет статический IP-адрес, который меняется редко. Домашний компьютер часто имеет IP адрес, назначенный провайдером, когда машина соединяется с ним. Этот IP-адрес является уникальным для этой сессии, но может оказаться другим в следующий раз. Таким образом, ISP, нужен только один IP адрес для каждого маршрутизатора, которые он поддерживает, а не для каждого клиента.

Если вы работаете на Windows машине, вы можете просмотреть множество информации об Интернете на вашем компьютере, включая ваш текущий IP-адрес и имя хоста, с помощью команды ipconfig . На UNIX-машине, надо набрать nslookup в командной строке для отображения IP-адреса машины.

Доменные имена

Поскольку большинство людей имеют трудности с запоминанием последовательности цифр, которые составляют IP-адреса, и потому, что IP-адреса иногда нужно менять, все серверы и сайты в Интернете также имеют и удобочитаемые имена, называемые доменными именами . Например, www.. Это проще для большинства из нас — запомнить www.сайт чем запоминать 5.9.205.233

Имя www.сайт на самом деле состоит из трех частей:

1. Имя World Wide Web (www). На самом деле можно обходиться и без явного указания «www», хотя, формально, это будет другая сеть.

2. Доменное имя (qriosity)

3. В зоне домена верхнего уровня (ru)

Доменными именами управляют Регистраторы доменных имен . Регистраторы создают доменные имена верхнего уровня и гарантируют, что все имена в зоне верхнего уровня домена является уникальным. Регистратор также предоставляет контактную информацию для каждого доменного имени и запускает сервис whois , указывающий на владельца домена. Имя хоста создается владельцем домена.

Серверы доменных имен

Набор серверов, называемых серверы доменных имен (DNS) сопоставляет удобочитаемые имена в IP-адреса. Эти серверы содержат простые базы данных, содержащие имена и IP-адреса, и они распределены по всему Интернету. Большинство отдельных компаний, Интернет-провайдеров и крупных университетов поддерживают малые DNS. Существуют также центральные DNS, которые используют данные, поставляемые Регистраторами доменных имен.

При вводе URL-адреса http://www..сайт, передает его на сервер доменных имен, сервер возвращает правильный IP-адрес для www.сайт. Целый ряд серверов имен может быть вовлечен в то, чтобы получить правильный IP-адрес.

Итак, повторим прочитанное: Интернет состоит из миллионов машин, каждая с уникальным IP-адресом. Многие из этих машин – серверы. Это означает, что они предоставляют услуги другим компьютерам в Интернет. Многие из этих серверов являются серверами электронной почты, Веб-серверами, FTP-серверами, серверами облачных сервисов.

Порты

Любой сервер делает свои услуги доступными через Интернет с помощью пронумерованных портов , по одному для каждой службы, доступной на сервере. Например, есть компьютер-сервер, на котором запущен Веб-сервер и FTP-сервер. Веб-сервер, как правило, будет доступен на порту 80, а FTP-сервер будет доступен на порту 21. Клиенты подключаются к сервису на определенный IP адрес и на определенный порт.

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

Если сервер принимает соединения на порту от внешнего мира, и если брандмауэр не защищает порты, вы можете подключиться к заранее обусловленному порту с любого компьютера в Интернет и воспользоваться услугой. Обратите внимание, что нет ничего, что заставляет Вас, к примеру, держать Веб-сервер на порту 80. Если вы установили свой сервер и загрузили программное обеспечение Веб-сервера на нем, вы могли бы поставить Веб-сервер на порту 999, или любом другом неиспользуемом порту. Затем, если, например, Ваша машина будет известна как xxx.yyy.com то к ней могут подключаться с URL http://xxx.yyy.com:999 - «:999» явно указывает номер порта, по которому можно добраться до вашего Веб-сервера. Если порт не указан, то браузер просто предполагает, что Веб-сервер доступен с помощью хорошо известного порта 80.

Протоколы

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

Дополнительно: Безопасность

Вы можете видеть из этого описания, что Веб-сервер это довольно простой фрагмент программного обеспечения. Он принимает имя файла, отправленного с помощью команды GET, получает файл и отправляет его в браузер. Даже если брать в расчет весь код для обработки портов, программа простейшего Веб-сервера состоит не более, чем из 500 строк кода. Полномасштабные Веб-серверы являются более сложными, но в своей основе тоже очень просты.

Большинство серверов устанавливают некоторый уровень безопасности к процессам обслуживания. Простейший вариант – запрос логина и пароля для получения доступа к серверу. Более продвинутые серверы добавляют дополнительную безопасность, путем установления зашифрованной связи между сервером и браузером, так что конфиденциальная информация (например, номера кредитных карт) может быть выслана по Интернету.

Это действительно все, что нужно Веб-серверу, который обслуживает стандартные, статические Веб-страницы . Статические страницы – это страницы, которые не изменяются, если вебмастер сам не отредактирует их.

Дополнительно: Динамические страницы

Что такое динамические Веб-страницы ? Например:

1. Любая гостевая книга позволяет ввести сообщение в HTML-форме, и выводит новые и старые записи автоматически.

2. Любой поисковик позволяет ввести ключевые слова в HTML-форме запроса, и тогда он динамически создает страницу, на основе поиска информации по этим ключевым словам.

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

Страницы нашего сайта — тоже являются динамическими, созданными при помощи PHP с использованием баз данных MySQL.