Тема: «Установка и настройка Web-сервера Apache+php+Mysql»
Вид материала | Документы |
- Тема php и базы данных Mysql, 134.82kb.
- В. К. Толстых учебное пособие администрирование сервера iis 5 Донецк, Донну 2004 министерство, 663.13kb.
- Установка и настройка программы WinGate Установка и настройка программы WinRoute Настройка, 444.53kb.
- Отчет по циклу лабораторных работ «Локальные вычислительные сети», 62.03kb.
- Волковский Дмитрий Михайлович, 161.39kb.
- Язык веб-программирования php. Обзор возможностей, области применения, 20.42kb.
- Настройка vpn сервера на Windows, 21.77kb.
- Настройка прокси-сервера в Google Chrome, 6.08kb.
- Установка и запуск программы 6 Настройка соединения, авторизации и безопасности 6 Подключение, 1851.46kb.
- Содействия Трудоустройству, 471.6kb.
Таблица 2 Допустимые опции директивы Options
Опция | Описание |
None | He разрешается использование каких-либо функций |
All | Разрешаются все функции |
FollowSymLinks | Разрешается использовать символические ссылки. С точки зрения безопасности не рекомендуется использовать этот режим |
SymLinkslfOwnerMatch | Разрешается использование символических ссылок, если ссылка указывает на объект, который принадлежит тому же пользователю, что и ссылка |
ExecCGI | Разрешается выполнение CGI-сценариев |
Indexes | Если эта опция выключена, сервер не будет передавать содержимое каталога при отсутствии файла index.phpl |
Includes | Разрешено использование серверных включений. Рекомендуется отключить эту опцию, поскольку это сильно нагружает сервер |
IncludesNoExec | Разрешает использование серверных включений, но запрещает запуск из них внешних программ |
Использование директивы Limit имеет следующий вид:
Limit, метод
Директива Limit ограничивает доступ к файлам в определенном каталоге. Параметр метод определяет метод передачи, например, GET или POST. Директиву Limit можно использовать внутри блоков Directory, Location или в файле .htacccess.
Блок директив Limit
В блоке Limit можно использовать такие директивы: allow (разрешить), deny (запретить), order (порядок), require (требуется). После директивы allow следует слово from, после которого можно указать IP-адрес, адрес сети, домен или просто имя компьютера. Слово all обозначает все компьютеры. Например, требуется запретить доступ всем компьютерам, кроме компьютеров, которые входят в домен ru (см. пример 4).
Пример 4. Директивы allow, deny
order deny, allow
deny from all
allow from ru
Следующий пример показывает, как разрешить доступ компьютерам только из вашей сети (см. пример 5). Пусть, при этом, сеть имеет адрес 192.168.1.0.
Пример 5. Разрешения доступа подсети 192.168.1.1.
order deny, allow
deny from all
allow from 192.168.1.1
Директива order определяет порядок выполнения директив allow и deny. Кроме значений allow, deny и deny, allow, директива order может содержать значение mutual-failure. В этом случае доступ будет отказан всем компьютерам, которые явно не указаны в списке allow.
Директиву require можно использовать для защиты каталога паролем. После названия директивы должен следовать список элементов: имена пользователей, групп, которые заданы в директивах AuthUserFile и AuthGroupFile. Можно использовать параметр valid-user, который укажет серверу предоставить доступ любому пользователю, имя которого имеется в директиве AuthUserFile, если он введет правильный пароль (см. пример 6).
Пример 6. Использование директивы require
AuthUserFile /var/secure/.htpasswd
AuthName Security
AuthType Basic
order deny, allow
deny form all
allow from ссылка скрыта
require valid-user
В примере 6 для аутентификации используется файл паролей .htpasswd, который можно создать с помощью программы htpasswd. Директивы блока Limit разрешают доступ к любому каталогу сервера только пользователям домена ссылка скрыта
Кроме параметра valid-user допускается использование параметра users или grpoups. Данные параметры разрешают доступ только определенным пользователям или группам пользователей (см. пример 7).
Пример 7. Применения параметра users
AuthType Basic
AuthUserFile /var/users/ .htpasswd
AuthName UsersDir
require users denis igor evg
Блок директив Location
С помощью директив, расположенных в блоке Location, можно задать определенный URL-адрес, который предназначен для обозначения каталогов, файлов или групп файлов. Обозначить группу файлов можно с помощью шаблонов, например, шаблон *.phpl определяет все файлы, имена которых заканчиваются на .phpl. В URL-адрес не включается протокол и имя сервера (см пример 8).
Пример 8. Блок Location
директивы управления доступом
Каталоги пользователей
Директива UserDir включает поддержку пользовательских каталогов. Эта директива определяет общее название подкаталога в домашних каталогах всех пользователей. По умолчанию используется каталог public_html.
Доступ к файлам, расположенным в этих каталогах, производится с помощью указания через наклонную черту пользователя после имени сервера. Например, пусть имя сервера ссылка скрыта, имя пользователя — denis, тогда URL-адрес будет выглядеть так: http: //www. Server. com/ ~denis/. При этом сервер самостоятельно определит, где именно расположен домашний каталог пользователя. Если домашний каталог пользователя /home/den, то сервер передаст клиенту файл /home/den/ public_html/index.phpl.
- Виртуальные HTTP-серверы
Концепция виртуальных хостов позволяет серверу Apache поддерживать несколько Web-узлов. Получается, что один Web-сервер заменяет несколько серверов, и вместо одного узла пользователи видят отдельные Web-узлы. Это очень удобно, если нужно организовать персональные Web-узлы пользователей или собственные Web-узлы подразделений компании, например, ссылка скрыта.
Сервер Apache можно настроить несколькими способами:
- чтобы запускался один сервер, который будет прослушивать ВСЕ обращения к виртуальным серверам,
- или запускать отдельный процесс для каждого виртуального сервера.
В первом случае один сервер будет одновременно обслуживать все виртуальные. В этом случае нужно настраивать виртуальные сервера с помощью директивы VirtualHost. Настройка отдельных процессов для каждого сервера осуществляется с помощью директивы Listen и BindAddress.
В зависимости от версии и от настроек Apache виртуальные узлы могут прописываться или в файле httpd.conf, или в файле vhosts.conf.
Виртуальные серверы можно идентифицировать по имени или по IP-адресу.
Виртуальные серверы с идентификацией по имени
Идентификация по имени имеет существенное преимущество перед идентификацией по IP-адресу: нет ограничения количества адресов, имеющихся у вас
в распоряжении. Можно использовать любое количество виртуальных серверов, и при этом не потребуются дополнительные адреса. Такое возможно благодаря использованию протокола HTTP/1.1. Данный протокол поддерживается всеми современными браузерами.
Поддержка виртуальных хостов обеспечивается директивами VirtualHost и NameVirtualHost. Если ваша система имеет только один IP-адрес, его нужно указать в директиве VirtualHost. Внутри блока директивы VirtualHost записывается директива ServerName. Эта директива задает доменное имя для создаваемого виртуального сервера. Все директивы VirtualHost используют один и тот же IP-адрес, заданный директивой NameVirtualHost. В блоке VirtualHost записываются параметры виртуального сервера, причем они записываются для каждого виртуального сервера отдельно (см. пример 9).
Структура каталогов виртуального узла задается директивами DocumentRoot, ErrorLog и TransferLog. Из примера 9 видно, что корневым каталогом для нашего виртуального узла будет /var/httpd/ www/html, а протоколы будут находиться в каталоге /var/httpd/www/ logs/error.log.
Пример 9. Два виртуальных сервера – www и lib
ServerName den . dhsilabs.com
ServerName ссылка скрыта
ServerAdmin webmaster@den.dhsilabs.com
DocumentRoot /var/httpd/www/html
ErrorLog /var/httpd/www/logs/error.log
TransferLog logs/access.log
ServerName ссылка скрыта
ServerAdmin webmaster@den.dhsilabs.com
DocumentRoot /var/httpd/lib/html
ErrorLog /var/httpd/lib/logs/error.log
TransferLog logs/access.log
Если система имеет только один IP-адрес, значит доступ к основному серверу станет невозможным, то есть вы не сможете использовать его напрямую. Можно основной сервер использовать в качестве виртуального. При наличии двух IP-адресов можно один присвоить основному серверу, а другой — виртуальному.
Сервер Apache позволяет использовать несколько доменных имен для доступа к одному серверу, например:
ServerAlias ссылка скрыта ссылка скрыта
При этом запросы, посланные по IP-адресам, которые присвоены виртуальным хостам, должны соответствовать одному из указанных доменных
имен. Чтобы зафиксировать запросы, не соответствующие ни одному их этих имен, нужно с помощью опции default:* создать виртуальный хост, который будет обслуживать такие запросы:
Обратите внимание на то, что в рассмотренном примере адреса
www. dhsilabs . com и lib. dhsilabs . com должны быть прописаны в DNS.
Виртуальные серверы с идентификацией по IP-адресу
В директиве VirtualHost в качестве адресов можно использовать доменные имена, но лучше указывать IP-адрес, причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при разрешении имени. Также потребуется один IP-адрес для вашего основного сервера. Если же распределить все адреса между виртуальными серверами, то нельзя будет получить доступ к основному серверу.
Пример 10. Идентификация по IP-адресу
ServerName ссылка скрыта
ServerAdmin webmaster@den.dhsilabs.com
DocumentRoot /var/httpd/www/html
ErrorLog /var/https/www/logs/error .log
ServerName ссылка скрыта
ServerAdmin webmaster@den.dhsilabs.com
DocumentRoot /var/httpd/lib/html
ErrorLog /var/https/lib/logs/error.log
В приведенном примере (см. пример.10) сконфигурированы два виртуальных сервера с идентификацией по IP-адресу. Один из них использует сам IP-адрес, а другой — доменное имя, соответствующее IP-адресу.
При конфигурировании виртуальных серверов можно использовать опцию ExecCGI, которая разрешает выполнение CGI-скриптов на виртуальном сервере. Ниже приведен пример для почтового Web-интерфейса (см. пример 11)
Пример 11. Подключение почтового Web-интерфейса
# файл httpd.conf
order deny,allow
deny from all
allow from localhost
allow from 192.168
allow from 123.123.123.123
Options ExecCGI
#Файл vhosts.conf
ServerAdmin webmaster@den.dhsilabs.com
DocumentRoot /home/httpd/mail
ServerPath /mail
ServerName ссылка скрыта
ErrorLog logs/error_log
TransferLog logs/access_log
ErrorDocument 403 ссылка скрыта
#Error 403 — доступ извне, то есть почтовый интерфейс будет
#доступен только из локальной сети
- Установка Apache+PHP+MySQL под Linux (Unix)
Все необходимое программное обеспечение входит в состав Linux — серверы Apache и MySQL, PHP, а также дополнительные модули mod_php и php_mysql. Программное обеспечение находится:
ссылка скрыта — официальный сайт Apache Group;
ссылка скрыта — сайт разработчиков MySQL;
ссылка скрыта — официальный сайт разработчиков РНР.
Для установки сервера Apache необходимо установить пакеты apache и apache-docs. В первом из них находится сам сервер, а во втором — документация. В последних версиях нужно установить еще и пакет apache-common, содержащий необходимые файлы для запуска сервера. Проще всего установку Apache можно произвести, введя следующую команду: rpm -ih apache*
После установки сервер конфигурируется для запуска в режиме standalone, то есть он будет постоянно находиться в памяти. Для запуска и останова сервера Apache используются команды:
/etc/rc.d/init.d/httpd start;
/etc/rc.d/init.d/httpd stop.
или команды
service httpd start;
service httpd stop.
После успешной установки сервера необходимо отредактировать файл /etc/httpd/conf / httpd.conf.
В нем необходимо исправить директиву — ServerName. При этом, на данном этапе (пока новое имя сервера Apache не зарегистрировано на вашем сервере DNS), вместо того имени, которое будет использоваться в дальнейшем (например, ссылка скрыта), установите обыкновенное имя вашего сервера, например, server.firma.ru. Данное имя должно быть зарегистрировано на DNS-
сервере вашей сети. После этого запустите сервер. Затем откройте любой браузер и попробуйте обратиться к серверу ссылка скрыта
Теперь попробуйте обратиться к этому серверу с другого компьютера вашей сети: ссылка скрыта
Если вы увидите приветствие сервера в первом и во втором случаях, значит, сервер Apache нормально работает и можно приступать к его дальнейшему конфигурированию.
В отличие от Windows-версии Apache, в Linux-версии вам не нужно редактировать какие-либо другие директивы, поскольку стандартные значения устраивают большинство пользователей. Вам также не нужно вручную прописывать РНР, поскольку он встраивается в Apache автоматически при установке пакета mod_php. Единственное, что вам нужно знать — это структуру каталогов — что и где лежит.
Корневым каталогом вашего Web-сервера является каталог /var/www/ html. Когда пользователь введет ссылка скрыта в строке браузера, ваш Web-сервер будет искать файл index.phpl именно в этом каталоге. Если данный каталог вас не устраивает, измените директиву DocumentRoot в файле конфигурации httpd.conf, после чего перезапустите Apache: service httpd restart.
Каталог /var/www/cgi-bin содержит CGI-приложения: из этого каталога возможен запуск программ. Журналы сервера находятся в каталоге /var/log/httpd.
Конфигурирование Apache с помощью netconf
Практически все параметры Web-сервера Apache можно установить, используя конфигуратор netconf (или linuxconf). Для этого запустите netconf и перейдите на вкладку Server Tasks, а затем нажмите на кнопку «Apache Web-server».
С помощью netconf устанавливаются основные параметры Apache (виртуальные хосты, параметры подкаталогов, спецификация каталогов и модулей, а также устанавливаются параметры модуля mod_ssl). Модуль mod_ssl обеспечивает поддержку защищенных SSL-соединений.
Установка MySQL
Благодаря своей простоте сервер MySQL приобрел широкое распространение в сети Интернет. MySQL идеально подходит практически для любого Интернет-проекта.
Прежде всего, нужно установить пакеты, необходимые для работы MySQL.
- MySQL_GPL-3.x.x
- MySQL_GPL-client-3.x.x
- MySQL_GPL-sharcd-libs-3.x
- MySQL_GPL-bench-3.x.x
- MySQL_GPL-resolveip-3.x.x
Проще всего воспользоваться командой rpm -ih MySQL* для установки сервера. После установки пакета нужно создать базу данных mysql:
mysql__install_db
Если основная база данных существует, программа сообщит об этом. Теперь нужно установить пароль для пользователя root. По умолчанию пользователь root не имеет пароля.
База данных mysql является системной базой данных и содержит следующие таблицы:
- таблицу db;
- таблицу host;
- таблицу user.
Таблица user содержит пароли всех пользователей, которые имеют право работать с сервером. На данном (начальном) этапе в базу данных внесен только один пользователь — root. Для изменения пароля запустите сервер командой:
safe_mysqld &
Эта команда запустит сервер в режиме демона и освободит консоль. Если все пакеты были установлены правильно, вы увидите сообщение;
mysql: ready for connections
Затем введите команду:
mysql -u root mysql
Данная команда запускает клиент MySQL. При этом используется имя пользователя root. Последний параметр определяет базу данных — mysql.
Измените пароль суперпользователя с помощью команды:
UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
Теперь нужно, чтобы MySQL принял изменения. Для этого выполните еще один запрос SQL:
FLUSH PRIVILEGES;
Для принятия изменений можно также использовать программу mysqladmin с параметром reload:
mysqladmin -р reload
Выйти из клиента mysql вы можете, введя команду quit.
Установите права доступа к сценарию /etc/rc.d/init.d/mysql:
chmod +х /etc/rc.d/init.d/mysql
Теперь перезапустите сервер командой:
/etc/rc.d/init.d/mysql restart
Если вы забудете пароль, вы его уже не восстановите. Единственный выход из этого положения — удалить каталог /var/lib/mysql/mysql и создать базу mysql заново командой mysql_install_db.
Теперь вы уже не можете зарегистрироваться на сервере без пароля. Если вы введете команду mysql -u root mysql, то получите следующее сообщение:
ERROR: Access denied for user: ' root@localhost' (Using password: NO)
Для регистрации на сервере теперь нужно использовать команду
mysql -u root -р. Параметр -р запросит пароль при регистрации.
Последнее, что вам осталось сделать — это добавить сервер MySQL в автозапуск. С этой целью перейдите в каталог /etc/rc.d/rc3.d/ и создайте символическую ссылку на файл /etc/rc.d/init.d/mysql:
in -s S14mysql /etc/rc.d/init.d/mysql
Префикс S14 определяет очередность запуска сервера mysql. В данном случае он запустится после сервисов network (S10) и portmap (S11). У вас эти значения могут быть другими.
В своей работе демон mysqld использует файл журнала /var/log/ mysql.log. Именно в него заносятся все транзакции, а также все команды, которые ввел пользователь. После установки сервера нужно внести пользователей, которые имеют право работать с сервером баз данных. Введите следующий запрос:
GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
Введенный запрос создаст пользователя admin, который будет иметь право выполнять любые операции со всеми базами данных. Данный пользователь будет иметь право подключаться к серверу с компьютера localhost, используя пароль password.
Маска *.* определяет, к каким базам данных и таблицам имеет право подключаться тот или иной пользователь. Первая звездочка определяет базу, а вторая — таблицу. Если нужно, чтобы пользователь admin имел право подключаться с любого хоста, используйте знак процента вместо имени хоста. В этом случае запрос будет выглядеть так:
GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY
' password' WITH GRANT OPTION;
Вместо всех полномочий вы можете определить, какие действия может выполнять с базой тот или иной пользователь. Если вы являетесь хостинг-провайдером и предоставляете доступ пользователю к его базе данных, то вы можете использовать следующий запрос:
GRANT CREATE, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX ON user.* TO user@% IDENTIFIED BY 'user_password';
Перед выполнением данного запроса необходимо создать базу данных user.
Полный список полномочий представлен в табл. 3.
Таблица 3 Полномочия пользователей сервера MySQL
Полномочия | Описание |
SELECT, INSERT, UPDATE, DELETE | Одноименные операции с данными: пользователь имеет право просматривать, добавлять, модифицировать, удалять данные в таблицах базы данных |
INDEX | Пользователь имеет право производить операции с индексами таблиц |
REFERENCES | Пользователь имеет право работать со ссылками в базах данных и таблицах |
CREATE, DROP | Создание и удаление таблиц и баз данных |
GRANT, ALTER | Операции с полномочиями |
RELOAD, SHUTDOWN, PROCESS | Пользователь имеет право перезагружать, останавливать сервер и просматривать все процессы (подключения) |
Если запрос GRANT не работает, то можно внести пользователя непосредственно в таблицу user базы данных mysql. Структура таблицы user выглядит следующим образом:
Host User Password Select_priv Insert_priv Update_priv Delete priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv
Поля Host, User, Password — это, соответственно, узел, из которого пользователь может получить доступ, имя пользователя, пароль пользователя. Все остальные поля задают полномочия для пользователя. Если выполнение какой-нибудь операции разрешено пользователю, соответствующее поле должно быть равным «Y». В противном случае установите значение «N».
Например, нам нужно создать пользователя admin, который должен иметь все полномочия. Это можно сделать с помощью такого запроса SQL:
INSERT INTO user(Host,User,Password,Select_priv,Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv) VALUES ('localhost' , 'admin',
password('4td561sl2'),'Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y');
При вводе запроса обратите внимание на регистр названий полей. Сервер MySQL различает прописные и строчные буквы! С помощью вышеприведенного запроса был создан пользователь admin, который имеет право регистрироваться на сервере только из узла localhost. Если нужно разрешить регистрацию из любого узла сети, используйте знак процента, однако это не совсем корректно с точки зрения безопасности. Пользователь admin обладает всеми возможными привилегиями. Пароль пользователя — 4td561sl2.
Для создания обыкновенного пользователя используйте следующий запрос:
INSERT INTO user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES('%', 'user', password (4234 5 6') , ' Y ' , ' У ' , ' Y ' , ' Y ' );