Нижегородский Государственный Технический Университет Практическая работа №2 по дисциплине: «Программное обеспечение вычислительных сетей» Тема: «Http-сервер Apache» Выполнил студент группы 10-В-1 Сидоренко О.О. Проверил: Кочешков А.А. г. Нижний Новгород 2014г. Общие сведения Apache HTTP-сервер— свободный веб-сервер. Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS. Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv6. Ядро Ядро Apache включает в себя основные функциональные возможности, такие как обработка конфигурационных файлов, протокол HTTP и система загрузки модулей. Ядро (в отличие от модулей) полностью разрабатывается Apache Software Foundation, без участия сторонних программистов. Теоретически, ядро apache может функционировать в чистом виде, без использования модулей. Однако, функциональность такого решения крайне ограничена. Ядро Apache полностью написано на языке программирования C. Система конфигурации Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации: Конфигурация сервера (httpd.conf). Конфигурация виртуального хоста (httpd.conf c версии 2.2, extra/httpd-vhosts.conf). Конфигурация уровня директории (.htaccess). Имеет собственный язык конфигурационных файлов, основанный на блоках директив. Практически все параметры ядра могут быть изменены через конфигурационные файлы, вплоть до управления MPM. Большая часть модулей имеет собственные параметры. Часть модулей использует в своей работе конфигурационные файлы операционной системы (например /etc/passwd и /etc/hosts). Помимо этого, параметры могут быть заданы через ключи командной строки. Система модулей Apache HTTP Server поддерживает модульность. Существует более 500 модулей[5], выполняющих различные функции. Часть из них разрабатывается командой Apache Software Foundation, но основное количество — отдельными open source-разработчиками. Модули могут быть как включены в состав сервера в момент компиляции, так и загружены динамически, через директивы конфигурационного файла. В модулях реализуются такие вещи, как: Поддержка языков программирования. Добавление функций. Исправление ошибок или модификация основных функций. Усиление безопасности. Часть веб-приложений, например панели управления ISPmanager и VDSmanager реализованы в виде модуля Apache. Механизм виртуальных хостов Apache имеет встроенный механизм виртуальных хостов. Он позволяет полноценно обслуживать на одном IP-адресе множество сайтов (доменных имён), отображая для каждого из них собственное содержимое. Для каждого виртуального хоста можно указать собственные настройки ядра и модулей, ограничить доступ ко всему сайту или отдельным файлам. Некоторые MPM, например Apache- 2 ITK позволяют запускать процесс httpd для каждого виртуального хоста с отдельными идентификаторами uid и guid. Также, существуют модули, позволяющие учитывать и ограничивать ресурсы сервера (CPU, RAM, трафик) для каждого виртуального хоста. Безопасность Apache имеет различные механизмы обеспечения безопасности и разграничения доступа к данным. Основными являются: Ограничение доступа к определённым директориям или файлам. Механизм авторизации пользователей для доступа к директории на основе HTTPаутентификации (mod_auth_basic) и digest-аутентификации (mod_auth_digest). Ограничение доступа к определённым директориям или всему серверу, основанное на IP-адресах пользователей. Запрет доступа к определённым типам файлов для всех или части пользователей, например запрет доступа к конфигурационным файлам и файлам баз данных. Существуют модули, реализующие авторизацию через СУБД или PAM. В некоторых MPM-модулях присутствует возможность запуска каждого процесса Apache используя различные uid и gid с соответствующими этим пользователям и группам пользователей. Также, существует механизм suexec, используемый для запуска скриптов и CGI-приложений с правами и идентификационными данными пользователя. Для реализации шифрования данных, передающихся между клиентом и сервером используется механизм SSL, реализованный через библиотеку OpenSSL. Для удостоверения подлинности веб-сервера используются сертификаты X.509. Существуют внешние средства обеспечения безопасности, например mod_security. 3 Подготовка к установке Файлы самого сервера, а также всех его модулей должны находиться в определенном месте системы. Желательно, чтобы структура расположения файлов имела некоторую логичность, так будет легче обслуживать сервер любому пользователю. Создадим папку «Server» в корне диска «D:\» - в ней будет располагаться вся структура. Создадим 2 подпапки: D:\Server\web – для компонент и прочих программ. D:\Server\domains – для сайтов В папке \web\ создадим еще 3 подпапки для файлов apache, php, mysql с соответствующими именами: D:\Server\web\apache\ D:\Server\web\php\ D:\Server\web\mysql\ В папке \domains\ создадим 2 подпапки: D:\Server\domains\localhost\ D:\Server\domains\phpmyadmin\ Внутри них создадим еще 2 подпапки: \public_html\ – для файлов сайта; \logs\ – для логирования работы После всех операций структура папок для установки сервера выглядит следующим образом: Помимо этого добавим в системную переменную «PATH» пути к Apache и MySQL. Они понадобятся для простого запуска сервисов. ;D:\Server\web\apache\bin;D:\Server\web\mysql\bin 4 Установка Apache Apache распространяется свободно и для установки Apache потребуется скачать архив файлов с официального сайта (www.apachelounge.com/download/). Также для нормальной работы требуется «Распространяемый пакет Microsoft Visual C++ 2010 (x64)»(www.microsoft.com/ruru/download/details.aspx?id=14632), он распространяется с программой-установщиком и процесс установки не вызывает затруднений. Архив с Apache содержит папку Apache24, файл с ссылкой -- Win64-2.4.9 VC10 – и файл ReadMe.txt. В последнем описана инструкция по установке и рекомендации. Распакуем файлы из Apache24 в заготовленную ранее папку D:\Server\web\apache\ Получится следующая структура: Теперь необходимо настроить сервер. Файл httpd.conf Основным конфигурационным файлом Apache является файл httpd.conf. В нем содержатся настройки WEB-сервера, виртуальных серверов всех его программных модулей. Файл .htaccess .htaccess - файл дополнительной конфигурации WEB-сервера. Применяется для управления вебсервером Apache со стороны конечного пользователя хостинга. В этот файл помещаются директивы, которые веб-сервер воспринимает и обрабатывает, выполняя действия в соответствии с настройками, которые были сделаны пользователем. Изменения, внесенные в файл, вступают в силу немедленно. Это связано с тем, что информация из .htaccess перечитывается при каждом обращении к веб-серверу Apache. Этот файл не доступен пользователю из браузера, поскольку является скрытым файлом сервера. Он служит для переопределения директив из файла httpd.conf. Перейдем в папку D:\Server\web\apache\conf\ и откроем файл конфигурации httpd.conf. Каждая строка файла содержит параметр настройки Apache, а также комментарий, в основном пояснение параметра, помеченный # Приступим к настройке: 5 Основная директория Apache по умолчанию задана структурой из архива, однако у нас другая структура папок, поэтому заменим параметр на следующий: ServerRoot “D:/Server/web/apache” IP-адрес и порт, который «слушает» сервер зададим следующий: Listen 127.0.0.1:80 Подключим два модуля для сервера: mod_rewrite - предназначен для преобразования исходных URL'ов. Его возможности колоссальны, но зачастую он используется для создания ЧПУ (Человеко Понятный УРЛ) php5apache2_4.dll - PHP. Помимо этого в файле конфигурации заранее прописаны подключения для более чем сотни модулей. LoadModule rewrite_module modules/mod_rewrite.so LoadModule php5_module "D:/Server/web/php/php5apache2_4.dll" Укажем Apache, что файлы с расширением php, нужно воспринимать как php-скрипты добавив следующий параметр: AddHandler application/x-httpd-php .php Укажем расположение файла настроек php PHPIniDir “D:/Server/web/php” Далее можно указать электронный адрес администратора сервера и имя сервера. Изменим имя: ServerName 127.0.0.1:80 Секция <Directory /> определяет доступ к файловой системе сервера. Откроем её для всех: Options Includes Indexes FollowSymLinks - разрешает формировать страницу содержимого каталога с символьными ссылками AllowOverride All - сервер будет допускать все директивы .htaccess файла. Allow from all Закроем секцию - </Directory> Зададим директорию с сайтами DocumentRoot “D:/Server/domains” Секция <Directory " D:/Server/domains "> определяет доступ сайтам: Options Indexes FollowSymLinks AllowOverride None - сервер не читает файл .htaccess. Require all granted - Все запросы разрешены. Расставим индексные файлы по приоритету. Т.е. сервер сначала будет искать первые файлы, постепенно переходя далее, если файл не найден. <IfModule dir_module> DirectoryIndex index.php index.html index.htm index.shtml </IfModule> Определим папки для log-файлов ErrorLog “C:/Server/domains/logs/error.log” – Ошибки сервера CustomLog “C:/Server/domains/logs/access.log” – Логгирование посещений Добавим alias для phpMyAdmin, и поправим alias для cgi. Common Gateway Interface является стандартом интерфейса, который служит для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом. <IfModule alias_module> 6 Alias /pma “D:/Server/domains/phpMyAdmin” ScriptAlias /cgi-bin/ “D:/Server/web/apache/cgi-bin/” </IfModule> Исправим путь и доступ для cgi <Directory “D:/Server/web/apache/cgi-bin”> AllowOverride None Options None Require all granted </Directory> Определим приложения для открытия типов файлов <IfModule mime_module> AddType text/html .shtml AddOutputFilter INCLUDES .shtml AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule> Подключим дополнительные конфигурационные файлы. Они хранят специальные настройки отдельных систем сервера – виртуальные хосты, мультипроцессорная обработка и пр. Include Include Include Include Include conf/extra/httpd-mpm.conf conf/extra/httpd-autoindex.conf conf/extra/httpd-vhosts.conf conf/extra/httpd-manual.conf conf/extra/httpd-default.conf На этом заканчивается настройка httpd.conf. Подключенные новые файлы конфигурации в основном уже содержат настройки по умолчанию, но некоторые стоит изменить. Откроем файл D:\Server\web\apache\conf\extra\httpd-mpm.conf и укажем место хранение pidфайла: <IfModule !mpm_netware_module> PidFile “D:/Server/web/apache/logs/httpd.pid” </IfModule> В него записывается процесс идентификации номера во время запуска сервера. Откроем файл httpd-autoindex.conf, изменим строки пути для загрузки иконок: Alias /icons/ "D:/Server/web/apache/icons/" <Directory "D:/Server/web/apache/icons"> Options Indexes MultiViews AllowOverride None Require all granted </Directory> Откроем httpd-vhosts.conf и обозначим виртуальные хосты: Для localhost <VirtualHost localhost:80> DocumentRoot "D:/Server/domains/localhost/public_html" ServerName localhost ErrorLog "D:/Server/domains/localhost/logs/error.log" CustomLog "D:/Server/domains/localhost/logs/access.log" common </VirtualHost> Для phpMyAdmin <VirtualHost phpmyadmin:80> DocumentRoot "D:/Server/domains/phpmyadmin/public_html" ServerName localhost 7 ErrorLog "D:/Server/domains/phpmyadmin/logs/error.log" CustomLog "D:/Server/domains/phpmyadmin/logs/access.log" common </VirtualHost> В httpd-manual.conf исправим только пути: AliasMatch ^/manual(?:/(?:da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn))?(/.*)?$ "D:/Server/web/apache/manual$1" <Directory "D:/Server/web/apache/manual"> В httpd-default.conf никаких изменений производить не требуется. Теперь можно начать установку. В командной строке от имени администратора введём, для установки Apache: >httpd –k install Запустится установщик файлов и сообщит, что установка успешно завершена 8 Установка PHP Модуль PHP также распространяется свободно, архив можно скачать с (anindya.com/tag/php/). Т.к. нужен php как модуль - скачиваем Thread Safe. Содержимое архива переносим в папку D:\Server\web\php\. В архиве есть и инструкция по установке в файле install.txt. Создадим две пустые папки D:\Server\web\php\tmp\ и D:\Server\web\php\upload\. В папке \php\ найдем файл php.ini-development и переименовываем его в php.ini. В корне установки есть два файла php.ini-development и php.ini-production. Эти файлы содержат базовые настройки. Первый файл оптимизирован для разработчиков, второй для рабочих систем. Основное отличие - в настройках для разработчиков разрешен вывод на экран ошибок, тогда как для рабочих систем вывод ошибок запрещен из соображений безопасности. Файл конфигурации (php.ini) считывается при запуске PHP. Для версий серверных модулей PHP это происходит только один раз при запуске веб сервера. Для CGI и CLI версиий это происходит при каждом вызове. Он содержит параметры в виде ключей. Каждый параметр описан в комментариях, начинающихся с «;». Файл также разделен на несколько разделов, имя которых указывается в квадратных скобках. Настроим параметры: Настройка php.ini short_open_tag = On - Определяет, разрешается ли короткая форма записи (<? ?>) тегов PHP zlib.output_compression = On - Следует ли сжимать страницы post_max_size = 64M - Устанавливает максимально допустимый размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов. include_path = ".;D:\Server\web\php\includes" - Указывает список директорий, в которых функции ищут файлы. extension_dir = "D:/Server/web/php/ext" - В какой директории PHP должен искать динамически загружаемые расширения upload_tmp_dir = "D:/Server/web/php/upload" - Временная директория, используемая для хранения файлов во время закачивания. upload_max_filesize = 64M - Максимальный размер закачиваемого файла. extension=php_bz2.dll - Функции сжатия bzip2 extension=php_curl.dll - Функции библиотеки CURL extension=php_gd2.dll - Библиотека функциий обработки изображений GD extension=php_mbstring.dll - Функции для работы с многобайтовыми (Multi-Byte) строками extension=php_mysql.dll - Функции MySQL extension=php_mysqli.dll - Функции MySQLi extension=php_pdo_mysql.dll - Объекты данных PHP Для mysql extension=php_sockets.dll - Функции для работы с сокетами extension=php_sqlite3.dll - Функции sqlite3 date.timezone = "Europe/Moskow" - Временная зона, используемая по умолчанию всеми функциями даты/времени. session.save_path = "D:/Server/web/php/tmp/" - определяет аргумент, который передается в обработчик сохранения. При установленном по умолчанию обработчике files, аргумент содержит путь, где будут создаваться файлы 9 Установка MySQL Установим MySQL как сокет под windows. Архив можно скачать с dev.mysql.com/downloads/mysql/. Содержимое архива перенесем в «D:\Server\web\mysql\» Теперь откроем файл настроек MySQL – «D:\Server\web\mysql\my-default.ini» и установим следующие параметры: [client] port=3306 host=127.0.0.1 [mysqld] port=3306 bind-address=127.0.0.1 enable-named-pipe basedir="D:/Server/web/mysql/" datadir="D:/Server/web/mysql/data/" sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES Теперь скрипты могут обращаться к серверу и по локальному IP, и по сокет-соединению. Для установки MySQL: >mysqld.exe --install MySQL --defaults-file=”D:\Server\web\mysql\my-default.ini” Установщик также скажет, что установка прошла успешно. Установим пароль для MySQL-пользователя. Для этого запустим службу MySQL: >NET start MySQL После того как служба запустилась, установим пароль. Выполним mysqladmin –u root password И введем новый пароль. 10 Установка phpMyAdmin PHPMyAdmin — веб-приложение, представляющее собой веб-интерфейс для администрирования СУБД MySQL. PHPMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Скачать последнюю версию PhpMyAdmin можно с phpmyadmin.net/home_page/index.php Перенесем содержимое архива в папку D:\Server\domains\phpmyadmin\public_html\. Найдём файл config.sample.inc.php, переименуем его в config.inc.php и добавимв него следующий скрипт: <?php $cfg['blowfish_secret'] = 'uxo53tr'; $i = 0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['AllowNoPassword'] = false; $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; ?> Теперь страница PHPMyAdmin откроется при заходе на домен http://phpmyadmin. 11 Проверка работоспособности Нужно проверить, работает ли сервер, позволяет ли загружать страницы. Запустим Apache. В командной строке выполним: >net start Apache2.4 Запустим MySQL: >net start MySQL Обе службы успешно запустились. Теперь можно проверить, работают ли системы, перейдя на адрес http://phpmyadmin. PHPMyAdmin работает на PHP и работает с MySQL, значит он отлично подходит для тестирования. Перед этим необходимо добавить в системный файл host строку, позволяющую использовать это имя: 127.0.0.1 phpmyadmin Откроем в браузере ссылку, появится окно приветствия и просьба ввести логин пароль. Также можно создать файд index.php в папке D:\Server\domains\localhost\public_html, внутри написать следующий код: <?php phpinfo(); ?> Тогда при переходе на http://localhost будет выведена информация о php и многая другая информация, включая информацию о сервере, который был настроен. Если посмотреть, то некоторые пути совпадают с теми, что мы вводили при настройке сервера, а значит информация верна. Т.е. все работает 12 13