То, что Интернет состоит из миллионов связанных между собой компьютеров или виртуальных VPS серверов, знают все. Но вот то, как выглядит и работает отдельно взятый веб-сервер, представляют себе далеко не все, поэтому было бы полезно сказать несколько слов об этом.
Вообще говоря, веб-сервером принято называть как аппаратную, так и программную часть этого комплекса. К программной части мы еще вернемся, а пока немного расскажем об аппаратной стороне дела. Сервер может представлять собой технически обычный компьютер, но в этом случае от него получается мало толку. В самом деле: его задача – обслуживание тысяч компьютеров, поэтому он, как минимум, должен иметь на входе необходимый стек модемных устройств – пул, который, помимо аппаратного разделения входящих адресов, может разделять их на программные. Это позволяет реализовывать конфигурации, в которых на одном физическом диске хранятся сайты самых разных компаний и частных лиц. Все они независимы друг от друга, но при этом используют один и тот же IP адрес входа. Так, к примеру, работает Народ.ру, а также многочисленные хостинги с техническими ограничениями ресурсов. Под каждый сайт выделяют, например, не более 1 Гб дискового пространства и 1-2% нагрузки процессора. Если эта квота часто превышается, то владельцам сайта мягко намекают на переход к более дорогому хостингу, где условия помягче. Но даже такие ограниченные ресурсы подразумевают то, что эти виртуальные хостинги имеют мощную аппаратную базу – к примеру, до 32 и более гигабайт памяти, большой дисковый массив. Сервер – этот тот случай, когда «много памяти не бывает». И, разумеется, все это добро трудится далеко не на процессоре Pentium II – 8-16 физических ядер будут не лишними. ОС, управляющая таким замысловатым содержимым – Linux, Unix или серверный вариант Windows, хотя последний встречается очень редко. Для каждого сайта запускается свой управляющий процесс, который и реализует диалог с клиентами, а также запускает интерпретаторы серверных языков и технологий поддержки – PHP, Java, SSI и т.д.
Программная часть для пользователя более проста, так как построена на технологии браузера. Браузер принимает запросы через URL, клики, формы и отправляет их методами POST или GET на сервер, где введенные данные разделяются на список заполненных переменных. Если данные корректны, они передаются сайту, представляющему собой набор скриптов или статичных страниц. Последние могут быть отправлены в браузер в неизменной форме, а для динамических сайтов сначала происходит генерация и обработка данных. Проще говоря, каждая страница, как на складе, хранится в разобранном виде в базе данных, и собирается каждый раз по запросу. При этом в ней выполняются настроечные скрипты типа PHP, и к пользователю попадает уже готовый документ. В процессе формирования страниц активно используются средства ускорения работы – профилирование и оптимизация страниц, кэширование полей баз данных и пула формирования документа, использование SSI программ для вычислений и многое другое.
Заметьте, что реализовать модель веб-сервера можно и на локальном компьютере, установив на нем, к примеру, сервер Apache, СУБД MySQL и интерпретаторы серверных языков. А, зная в совершенстве методы расширения Apache, можно было бы даже создать свой скриптовый язык программирования.