Установка и конфигурация веб сервера Apache с поддержкой PHP, JSP и MySQL на Windows XP

Обзор

В ходе данной инструкции мы подробно рассмотрим установку веб сервера Apache, PHP, Tomcat (для поддержки JSP) и их привязку для совместной работы. Рассмотрим примерный файл конфигурации Apache. Затем мы произведем установку MySQL сервера и рассмотрим примеры доступа к нему из PHP и JSP. Установим PHPMyAdmin для работы с MySQL.

Необходимые компоненты

Мною были использованы следующие версии, по возможности самые последние.
Apache 2.0.52
PHP 4.3.9
Tomcat 5.5.4
mod_jk 1.2.6
J2SDK 1.5.0
MySQL 4.1.7
Connector/J 3.1.6
PHPMyAdmin 2.6.0
Где взять необходимые компоненты?
Apache Web Server
http://httpd.apache.org/
PHP
http://www.php.net/
JSP

* Tomcat
http://jakarta.apache.org
* mod_jk
http://www.javaportal.ru/downloads/downloads.html
* Java
http://java.sun.com/

MySQL

* MySQL Database
http://dev.mysql.com/downloads/
* Connector/J
http://dev.mysql.com/downloads/
* PHPMyAdmin
http://www.phpmyadmin.net/

Установка Apache

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

Запускаем apache_2.0.52-win32-x86-no_ssl и видим окно приветствия:

Жмем «Next».

Появляется окошко, где нам предлагают ознакомиться с лицензией на использование данного продукта, выбираем «I accept….» и жмем «Next».

Немного истории, и снова «Next».

В окошко информации о сервере вводим данные, как показано выше на картинке:
Network Domain: localhost
Server name: localhost
Administrator`s Email Address: localhost»@localhost

Так же выберем "For All Users, on 80 port, as a Service -- Recommended". И далее «Next»

Выбираем Custom для выбора всех компонентов для установки.

Выбираем все для полной установки, меняем путь инсталляции на C:ServerApache2

Опять жмем «Next».

Наблюдаем ход установки.

Установка завершена. В правом нижнем углу появился заначек?

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

Здесь мы можем стартовать, остановить, или перезапустить наш сервер.

Теперь протестируем наш сервер. Открываем браузер и в строке адреса, вводим http://localhost. Если вы увидите следующей результат:

Значит сервер установлен удачно.

Установка PHP

Извлекаем содержимое php-4.3.9-Win32.zip в папочку C:Server и переименовываем получившеюся папку «php-4.3.9-Win32» в «php4».

Теперь нам надо дать понять серверу что у нас есть PHP интерпретатор.

Добавляем в конец конфигурационного файл нашего сервера C:ServerApache2confhttpd.conf следующею запись:

# Даём знать серверу что у нас есть PHP интерпретатор
ScriptAlias /php4/ "C:/Server/php4/"
Action application/x-httpd-php4 "/php4/php.exe"

# Устанавливаем расширения для PHP скриптов
AddType application/x-httpd-php4 .php .php3 .php4 .phtm .phtml

Сохраняем файл. Перезапускаем наш сервер (кнопочка restart в панели управления сервером), еще не забыли как?

Теперь нам надо проверить работает ли эта связка. В папочке C:ServerApache2htdocs (эта папка по умолчанию стои корневой, доступной с http://localhost) создаем файл phpinfo.php следующего содержания:

<?php

phpinfo();

?>

Сохраняем. Открываем в браузере http://localhost/phpinfo.php, если все прошло удачно должны увидеть следующие:

Устанавливаем поддержку JSP

Для этого нам необходимо установить JDK версии 1.5, так как мы будем устанавливать Tomcat 5, а он на версии ниже 1.5 не работает.

Запускаем jdk-1_5_0-windows-i586.exe

Соглашаемся с лицензионным соглашением.

Оставляем все как есть

Ход установки.

Далее начинается установка среды выполнения

Также оставляем все как есть.

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

JDK установлен!!!

Приступаем к установке Tomcat 5.

Запускаем jakarta-tomcat-5.5.4

Принимаем приветствие и лицензионное соглашение

Выбираем полную установку, помечая все компоненты галочками.

Устанавливаем все в туже папочку “Server”

Конфигурацию оставляем по умолчанию.

Проверяем путь до JRE.

Ход инсталляции

Ок. все готово. Но пока Tomcat работает сам по себе и не связан с Apache.

Проверяем работоспособность Tomcat. Открываем в браузере http://localhost:8080/, так как Tomcat по умолчанию слушает порт 8080. При положительном результате мы должны увидеть следующее:

Теперь наша задача состоит в том чтобы прикрутить Tomcat на localhost:

Для этого нам необходимо скопировать коннектор mod_jk.dll в папочку C:ServerApache2modules и в конфигурационном файле httpd.conf Apache2 добавить следующую запись:

###########################################################

## JSP Support

## Copied from Tomcat auto-configuration file

## + added JkMount /*.jsp ajp13

## + removed Virtual Host

IfModule !mod_jk.c>

 LoadModule jk_module C:/Server/Apache2/modules/mod_jk.dll

</IfModule>

JkWorkersFile "C:/Server/Tomcat 5.5/conf/workers.properties"

JkLogFile "C:/Server/Tomcat 5.5/logs/mod_jk.log"

JkLogLevel info

JkMount /manager ajp13

JkMount /manager/ * ajp13

JkMount /servlets-examples ajp13

JkMount /servlets-examples/ * ajp13

JkMount /jsp-examples ajp13

JkMount /jsp-examples/ * ajp13

JkMount /tomcat-docs ajp13

JkMount /tomcat-docs/ * ajp13

JkMount /webdav ajp13

JkMount /webdav/ * ajp13

JkMount / ajp13

JkMount / *. jsp ajp13

После чего необходимо перезагрузить сервер Apache2.

Давайте теперь проверим, работает ли? Открываем в браузере http://localhost/jsp-examples/. И если видим следующее, то все работает!

Конфигурация сервера

Теперь нам необходимо привести в порядок наш сервер, настроим его под себя. Открываем файл httpd.conf, все оттуда удаляем и вставляем туда текст:

# Папка куда установлен наш веб сервер

ServerRoot "C:/Server/Apache2"



# Порт, который слушает наш веб сервер

Listen 80



# Устанавливаем SSI, для файлов с расширением shtm, shtml html

AddType text/html .shtm .shtml .html

AddOutputFilter INCLUDES .shtm .shtml .html



# E-mail адрес админа веб сервера (поменяйте на свой)

ServerAdmin localhost@localhost



# Наш сервер:порт

ServerName localhost:80

UseCanonicalName Off



# Индексные файлы, через пробел

DirectoryIndex index.htm index.html index.shtm index.shtml
 index.php index.php3 index.php4 index.jsp



# Имя встроенного конфигурационного файла

AccessFileName .htaccess



# Даём знать веб серверу, что у нас есть PHP интерпретатор

ScriptAlias /php4/ "C:/Server/php4/"

Action application/x-httpd-php4 "/php4/php.exe"



# Устанавливаем расширения для PHP скриптов

AddType application/x-httpd-php4 .php .php3 .php4 .phtm .phtml





# Папка куда будем складывать все наши html и прочие файлы.

DocumentRoot "C:/Server/www"



PidFile logs/httpd.pid

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

HostnameLookups Off



# Модули

LoadModule access_module modules/mod_access.so

LoadModule actions_module modules/mod_actions.so

LoadModule alias_module modules/mod_alias.so

LoadModule asis_module modules/mod_asis.so

LoadModule auth_module modules/mod_auth.so

LoadModule autoindex_module modules/mod_autoindex.so

LoadModule cgi_module modules/mod_cgi.so

LoadModule dir_module modules/mod_dir.so

LoadModule env_module modules/mod_env.so

LoadModule imap_module modules/mod_imap.so

LoadModule include_module modules/mod_include.so

LoadModule isapi_module modules/mod_isapi.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule mime_module modules/mod_mime.so

LoadModule negotiation_module modules/mod_negotiation.so

LoadModule setenvif_module modules/mod_setenvif.so

LoadModule userdir_module modules/mod_userdir.so

# Закрываем доступ к файлам конфигурации (.htaccess) и паролей (.htpasswd)

<Files ~ "^.ht">

 Order allow,deny

 Deny from all

</Files>



# База с типами файлов

TypesConfig conf/mime.types



# Тип всех документов - текстовый

DefaultType text/plain



<IfModule mod_mime_magic.c>

 MIMEMagicFile conf/magic

</IfModule>



# Файл отчёта с ошибками

ErrorLog logs/error.log



# Что записывать в файл отчёта, может принимать следующие значения:

# debug, info, notice, warn, error, crit, alert, emerg.

LogLevel warn



# Шаблон записи строки в файл отчёта

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

LogFormat "%h %l %u %t "%r" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent



# Файл отчёта со списком всех доступов к веб серверу

CustomLog logs/access.log common



ServerTokens Full



# Подпись веб сервера (On - включена, Off - отключена,
# EMail - показывать e-mail админа сервера)

ServerSignature On



# Виртуальные папки

# Например:

# Alias /icons/ "C:/Server/Apache2/icons/"

# Зайдя на http://localhost/icons/
# мы увидем содержимое папки C:/Server/Apache2/icons/

Alias /icons/ "C:/Server/Apache2/icons/"

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/ *

AddIconByType (IMG,/icons/image2.gif) image/ *

AddIconByType (SND,/icons/sound2.gif) audio/ *

AddIconByType (VID,/icons/movie.gif) video/ *



# Выбираем иконки для различных форматов

AddIcon /icons/binary.gif .bin .exe

AddIcon /icons/binhex.gif .hqx

AddIcon /icons/tar.gif .tar

AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv

AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

AddIcon /icons/a.gif .ps .ai .eps

AddIcon /icons/layout.gif .html .shtml .htm .pdf

AddIcon /icons/text.gif .txt

AddIcon /icons/c.gif .c

AddIcon /icons/p.gif .pl .py

AddIcon /icons/f.gif .for

AddIcon /icons/dvi.gif .dvi

AddIcon /icons/uuencoded.gif .uu

AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl

AddIcon /icons/tex.gif .tex

AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..

AddIcon /icons/hand.right.gif README

AddIcon /icons/folder.gif ^^DIRECTORY^^

AddIcon /icons/blank.gif ^^BLANKICON^^



# Иконка для неизвестных форматов

DefaultIcon /icons/unknown.gif



# Если выводится содержимое какой-либо папки, cчитываются файлы описания:

ReadmeName README.html

HeaderName HEADER.html



# Файлы для игнорирования, при выводе листинга директории

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t



AddEncoding x-compress Z

AddEncoding x-gzip gz tgz



# Наша кодировка

AddDefaultCharset WINDOWS-1251



# "C:/Server/Apache2/cgi-bin" директория CGI-скриптов

<Directory "C:/Server/Apache2/cgi-bin">

 AllowOverride None

 Options None

 Order allow,deny

 Allow from all

</Directory>


###########################################################

## JSP Support

## Copied from Tomcat auto-configuration file

## + added JkMount / *.jsp ajp13

## + removed Virtual Host



<IfModule !mod_jk.c>

 LoadModule jk_module C:/Server/Apache2/modules/mod_jk.dll

</IfModule>

JkWorkersFile "C:/Server/Tomcat 5.5/conf/workers.properties"

JkLogFile "C:/Server/Tomcat 5.5/logs/mod_jk.log"

JkLogLevel info

JkMount /manager ajp13

JkMount /manager/ * ajp13

JkMount /servlets-examples ajp13

JkMount /servlets-examples/ * ajp13


JkMount /jsp-examples ajp13

JkMount /jsp-examples/ * ajp13

JkMount /tomcat-docs ajp13

JkMount /tomcat-docs/ * ajp13

JkMount /webdav ajp13

JkMount /webdav/ * ajp13

JkMount / ajp13

JkMount / *.jsp ajp13

Сохраняем. Перезагружаем сервер.

Устанавливаем MySQL сервер

Распаковываем файл mysql-4.1.7-win.zip и запускаем файл Setup.exe

Приветствие, жмем Next

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

Выбираем все компоненты для установки, и указываем путь для инсталляции C:ServerMySQL Server 4.1. Идем далее.

Готовы к началу процесса инсталляции? Жмем Install.

Наблюдаем процесс инсталляции.

Пропускаем шаг регистрации на MySQL.com.

Ставим галочку на опции «Конфигурировать MySQL сервер». И завершаем процесс установки приступая к конфигурации.

Опять приветствие.

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

Указываем, что MySQL сервер будет запускаться как служба Windows.

Указываем пароль для администратора, допустим это будет «password».

Execute и все готово! После чего мы наблюдаем следующую картинку в нижнем правом углу:

Теперь тестируем наш MySQL сервер. Создадим в папке www файл index.php следующего содержания:

<?# Адрес нашего MySQL сервера
$mysql_host = "localhost";

# Пользователь, который осуществляет соединение
$mysql_user = "root";

# Пароль для доступа к MySQL базе
$mysql_password = "password";

# Соединяемся с MySQL сервером
$mysql = mysql_connect($mysql_host, $mysql_user, $mysql_password);

if ($mysql)
{
 echo "Hello World!!!";
}

# Закрываем соединение
mysql_close($mysql);

?>

Сохраняем.

Открываем в браузере http://localhost/index.php и....

Не тут то было! Вылезет ошибка «Client does not support authentication protocol requested by server; consider upgrading MySQL client»

Ну что же это небольшая не совместимость. . . В MySQL 4.1 применяется новый способ хранения паролей и из-за этого вылезает несовместимость всех старых клиентов с MySQL. Что же делать?

Запускаем C:ServerMySQL Server 4.1binmysql.exe и набираем следующую команду как показано на рисунке:

Набираем set password for жмем Enter

Набираем root@localhost = old_password(‘password’)

Жмем Enter. Набираем q жмем Enter, окошко закрывается.

Ну теперь должно заработать, открываем в браузере http://localhost/index.php и....

Работает!!!

Теперь нам необходимо прикрутить коннектор для подключения к MySQL серверу из JSP.

Распаковываем mysql-connector-java-3.1.6.zip. Папочку mysql-connector-java-3.1.6. переименовываем в jconnector (C:Serverjconnector). Берем из этой папочки файл mysql-connector-java-3.1.6-bin.jar и копируем его в папку C:ServerTomcat 5.5commonlib.
Ну теперь надо попробовать подключиться к MySQL серверу из JSP. Давайте в папочке C:ServerTomcat 5.5webappsjsp-examples создадим файл test.jsp:

<%@ page contentType="text/html; charset=windows-1251" %>

<%@ page import ="java.net.*" %>

<%@ page import ="java.sql.*" %>

<HTML>

<HEAD>

<TITLE> Доступные БД </TITLE>

</HEAD>

<BODY>

<h3>Доступные БД</h3>

<%

//Загружаем драйвер

Class.forName("com.mysql.jdbc.Driver").newInstance();

//Подключаемся к бд

Connection conn =
 DriverManager.getConnection("
 jdbc:mysql://localhost/test?user=root&password=password");

Statement stmt = null;

ResultSet rs = null;

stmt = conn.createStatement();

//Запрос на имеющиеся БД

rs = stmt.executeQuery("SHOW DATABASES");

 boolean more = rs.next ();

 while (more)

 {

 // Получае значение первой колонки

 out.print(rs.getString(1));

 out.print("<br>");

 // Передвигаемся на следующую строку набора данных

 more = rs.next ();

 }

%>

</BODY>

</HTML>

Открываем браузер http://localhost/jsp-examples/test.jsp

Ок все работает!

Ну и заключительный момент установка PHPMyAdmin

Для этого разархивируем phpMyAdmin-2.6.0-pl3.zip в папку C:Serverwww и переименуем в phpmyadmin.

Откроем файл config.inc.php

Заменим

$cfg['PmaAbsoluteUri'] = '';

на

$cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';

И аналогично поступаем со следующими строками файла:

$cfg['Servers'][$i]['controluser'] = ' root ';

$cfg['Servers'][$i]['controlpass'] = 'password';

$cfg['Servers'][$i]['user'] = 'root';

$cfg['Servers'][$i]['password'] = 'password';

Сохраняем. Открываем в браузере http://localhost/phpmyadmin/

И наблюдаем в случае положительного результата: