Создание интернет-проекта. Часть 2. Компоненты веб-сервера

Уверен, что за прошедшую неделю вы изучили особенности достаточного количества систем управления контентом. Достаточного для того, чтобы сделать выбор в пользу той или иной системы. Хочу обратить внимание, что если вы не сильны в чтении технической документации на английском, то лучше выберите CMS, у которой есть представительство в рунете, иначе мануалы придется листать со словарем (:. Я же, естественно, делаю выбор в пользу той CMS, которую знаю лучше всего, – это Wordpress. Ну, это было лирическое отступление, чтобы больше не возвращаться к данному вопросу.
В этой статье мы продолжаем создавать свой собственный интернет-проект. Немного подумав, я решил, что среди пользователей наиболее популярны в настоящее время блоги – именно о создании бога и пойдет речь дальше. Конечно, если автор умеет писать и подкован в вопросах SEO-оптимизации, то его блог как минимум будет иметь несколько сотен читателей в день, а если еще и информация будет выкладываться востребованная и/или редкая, то и того больше.

При создании собственного ресурса в Сети стоит понимать, что знания выбранной системы управления контентом и нескольких языков программирования в web – мало. Нужно знать и понимать и основу сервера, тот фундамент, который позволяет сайту работать. И если не для общего развития, то хотя бы потому, что ситуации разные бывают. Сегодня я расскажу о компонентах, которые необходимы серверу для того, чтобы ваш сайт был доступен в Сети. Рассмотрен будет как минимальный набор, так и чуть больше его. Опять же все зависит от ваших планов, может, вы захотите через некоторое время сделать на блоге файловый архив или свободный почтовый сервер?

Начнем с минимального набора, того, что позволит работать CMS без каких-либо проблем. Такой сервер называется AMP. Что значит AMP? Все очень просто, это первые буквы трех основных компонентов: Apache, MySQL, PHP. Обычно в название конфигурации сервера добавляется еще одна буква, в самом начале. Она указывает на платформу, на основе которой построен сервер. Например, LAMP – Linux+Apache+MySQL+PHP или WAMP — соответственно Windows+Apache+MySQL+PHP. Итак, давайте рассмотрим компоненты подробнее, что они такое и с чем их едят.

Apache

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

«Apache HTTP-сервер (сокращение от англ. a patchy server) — свободный веб-сервер.

Apache является кроссплатформенным ПО, поддерживая операционные системы GNU/Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основными достоинствами Apache считаются надежность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv6.

Недостатком наиболее часто называется отсутствие удобного стандартного интерфейса для администратора».

Апачем пользуются практически все, потому как он дает все необходимые возможности и при этом является свободным программным обеспечением. В определении написано, что апач кроссплатформенный и указано, какие операционки поддерживает. Это делает его лучшим web-сервером, поскольку проблем с его работой нет ни на какой ОС. В качестве недостатка указано отсутствие гибкого и удобного для администратора интерфейса управления. Да, это так. Настройка сервера производится вручную, изменения вносятся в файл конфигурации. Но хочу заметить, что это дает ему большую гибкость в настройке, о чем в определении тоже сказано.

История создания Apache уходит своими корнями в 1995 год. Тогда сервер был написан для того, чтобы залатать баги местной знаменитости, которой в то время был NCSA HTTPd 1.3. После сервер был переписан заново и перестал содержать код NCSA. Появилось три ветки (или серии) Apache: 1.3, 2.0, и 2.2. На данный момент разработка ведется только в ветке 2.2, а в остальных двух идет просто исправление багов. Кроме того, на сегодняшний момент ведется тестирование сервера 2.3, в котором будут реализованы многие современные возможности, о которых его предшественникам и мечтать не приходится.

Серия 1.3 оптимизирована под Unix-системы, поскольку кроме основного процесса при работе сервера имеется еще множество дополнительных процессов (preforked). Для Windows, например, такой способ функционирования не свойственен, поскольку она использует многопоточность.

Ну а ветка 2.0 от 2.2 отличается несильно: среди нововведений 2.2 - переработанная система аутентификации, усовершенствованные модули кэширования, добавлен модуль балансировки загрузки для mod_proxy, поддержка файлов размером более 2-х Гб и так далее. Это достаточно важно. Изменения невелики, но на работоспособность они влияют значительно.

При помощи системы модулей Apache может работать с внушительным количеством языков web-программирования: php, perl, python и т.д. Кроме того, имеется и поддержка cgi/fastcgi – это позволяет выполнять программы, написанные на практически всех языках программирования, включая С++, С, Java и т.д.

Сервер имеет внушительно количество механизмов, которые занимаются обеспечением безопасности. Рассмотрим некоторые из них.

Ограничение доступа к определенным директориям или файлам.

Механизм авторизации пользователей для доступа к директории по методу HTTP-Авторизации (mod_auth_basic) и digest-авторизации (mod_auth_digest).
Ограничение доступа к определенным директориям или всему серверу, основанное на IP-адресах пользователей.

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

Существуют модули, реализующие авторизацию через СУБД или PAM.

В некоторых MPM-модулях присутствует возможность запуска каждого процесса Apache, используя различные uid и gid с соответствующими этим пользователям и группам пользователей.

Также существует механизм suexec, используемый для запуска скриптов и CGI-приложений с правами и идентификационными данными пользователя.
Для реализации шифрования данных, передающихся между клиентом и сервером, используется механизм SSL, реализованный через библиотеку OpenSSL. Для удостоверения подлинности web-сервера используются сертификаты X.509.

Существуют внешние средства обеспечения безопасности, например mod_security.

Что является несомненным плюсом для основных масс – это наличие проекта, который занимается переводом документации на русский язык. Если заинтересовались, то пожалуйста — сайт , изучайте на здоровье.

СУБД MySQL

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

«MySQL (сленг. «май-эс-кью-эль», сленг. «мускул») — свободная система управления базами данных (СУБД). MySQL является собственностью компании Sun Microsystems, осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор. Помимо этого компания MySQL AB разрабатывает функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.

MySQL является решением для малых и средних приложений. Входит в LAMP. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удаленные клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.
Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL- лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц».

Вот так вот. Как видите, в определении фигурирует LAMP-сервер, о чем мы тут с вами и говорим. Долго говорить я о мускуле не буду, потому как если рассматривать особенности, то необходимо рассматривать их по версиям, а это займет немало времени. Пожалуй, остановлюсь на том, что СУБД тоже кроссплатформенная и поддерживается многими операционками, среди которых AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003 и Windows Vista. Существует также порт MySQL к OpenVMS. Вот такой вот внушительный список. Тут нет ни одного представителя из семейства RetHat, но будьте уверены, что мускул поддерживает и Fedora, CentOS, Mandriva и т.д. Русскоязычный сайт тоже имеется, и на нем можно найти всю необходимую документацию - сайт

PHP

Скриптовый язык, на котором и написана наша CMS. Он сейчас является наиболее популярным, хотя имеет и несколько конкурентов, среди которых ASP.
«PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста», англ. Personal Home Page Tools (устар.) — «Инструменты для создания персональных веб-страниц») является скриптовым языком, созданным для генерирования HTML-страниц на веб-сервере и работы с базами данных. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров. Входит в LAMP — распространенный набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)).

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

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

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введен деструктор, открытые, закрытые и защищенные члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. Нововведения, однако, были сделаны с расчетом сохранить наибольшую совместимость с кодом на предыдущих версиях языка. На данный момент стабильной является PHP 5.3.0, которая содержит ряд изменений и дополнений:

. значительно увеличена скорость работы, примерно на 10-20%;
. пространство имен;
. позднее статическое связывание и специальный метод __callStatic();
. лямбда-функции и замыкания;
. добавление расширений: intl, phar (phar is scheduled for some more work a head of alpha2), fileinfo и sqlite3;
. опциональный сборщик мусора;
. был написан драйвер MySQLnd для самой популярной у PHP-разработчиков базы данных Mysql. С появлением нативного драйвера скорость работы с Mysql значительно увеличилась, также новый драйвер доступен уже в стандартной сборке (ранее это было невозможно из-за лицензии, связанной с libmysql);
. отмена поддержки версий операционной системы до Windows 2000 (Windows 98, NT4, и.т.д.);
. новые синтаксические конструкции, такие как NOWDOC, ограниченный GOTO, короткий вид тернарного оператора «?:».

Шестая же версия находится в разработке с октября 2006 года. Количество нововведений в ней также обещает быть внушительным. Например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, php_magic_quotes и register_globals из конфигурационного файла php.ini.

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

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

Perl

Этот язык высокоуровневый и является языком общего назначения. Это означает, что его можно использовать не только в web-кодинге. Однако он довольно сильно прижился, если не столько в роли замены php, то как дополнение к нему – точно.

«Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language, «практический язык для извлечения данных и составления отчетов». Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl, жемчужина. Но затем стало известно, что такой язык существует и букву «а» убрали. Талисманом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжелую работу.

Согласно Ларри Уоллу, Perl имеет два девиза. Первый — There’s more than one way to do it (Есть больше одного способа сделать это, также известный как TMTOWTDI); второй — Easy things should be easy and hard things should be possible (Простые вещи должны быть простыми, а сложные вещи — возможными).

Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе реализованные при помощи регулярных выражений. Перл унаследовал много свойств от языков Си, shell script, awk. Он также знаменит огромной коллекцией дополнительных модулей CPAN».
Поскольку PHP имеет некоторые возможности Perl’а (проще говоря, Perl повлиял на PHP), то наличие двух языков существенно увеличивает возможности, которые перед вами лежат. Обычно Perl необходим для функционирования некоторых отдельных компонентов ресурса. То, что некоторые компоненты написаны на Perl, не только увеличивает их функциональность, но и снимает часть нагрузки с PHP, что тоже хорошо. Ссылок на этот раз я вам дам несколько, поскольку одной тут ну никак не отделаться. Русского перевода документации (нормального) я не нашел, однако есть перевод FAQ, он может быть полезным в некоторых ситуациях - сайт Ну и в завершение несколько ссылок на русскоязычные сообщества: сайт и сайт Погуглив, я не нашел белорусского сообщества (имеется в виду официальное, т.е. Minsk.pm), однако на одном из форумов я увидел пост, в котором звучал призыв к созданию такового. Надеюсь, что в скором будущем наша страна также обзаведется perl-сообществом.

CGI

Итак, мы добрались до CGI. Этот стандарт интерфейса помогает реализовать многие полезные функции, например, оплата товара в интернет-магазине, а точнее, ее автоматизация. Также CGI позволяет web’у взаимодействовать с приложениями, написанными на, скажем, С++.

«CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб- сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа».

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

Все скрипты, как правило, помещают в каталог cgi-bin сервера, но это не обязательно: скрипт может располагаться где угодно, но при этом большинство веб-серверов требуют специальной настройки.

В веб-сервере Apache, например, такая настройка может производиться при помощи общего файла настроек httpd.conf или с помощью файла .htaccess в том каталоге, где содержится этот скрипт. Также Apache позволяет запускать все скрипты, имеющие расширение .cgi.

CGI является одним из наиболее распространенных средств создания динамических веб-страниц».

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

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

Евгений Кучук q@sa-sec.org SASecurity gr.


Компьютерная газета. Статья была опубликована в номере 32 за 2009 год в рубрике интернет

©1997-2022 Компьютерная газета