Новичку — Apache - это просто.
Apache - это просто.
Не буду говорить, что в настройке и администрировании апача я собаку съел, однако, одно время занимался им достаточно плотно, и конфигураций повидал много, поэтому и решился написать небольшую статейку про апач, модули, виртуальные хосты и .htaccess, дабы разложить знания по полочкам у себя в голове, ну и передать их(знания) дальше. Сразу хочу предупредить, что статья носит, скорее, информационный характер, нежели руководство к действию, здесь не будет готовых примеров настройки апача, но кое-что все-таки придется привести в качестве примера.
Забыл упомянуть, версия Апача, которую мы будем рассматривать - 2.x
1. Структура конфигурационных файлов Apache.
Вообще Апач конфигурируется одним файлом - apache2.conf, который располагается в /etc/apache2/ (Debian), однако, для нашего удобства, разработчики позаботились о возможности разбиения на несколько файлов, что очень и очень удобно. К примеру, нам гораздо удобней держать информацию о конфигурировании модулей в одной папке, а информацию о конфигурировании виртуальных хостов в другой. Для этого нам необходимо добавить в файл apache2.conf, на место, куда мы хотели поместить информацию о модулях или виртуальных хостах, строку:
Если хотим подключить все файлы с расширением .conf, можно поступить так:
Так же разработчики Апача заранее позаботились о расположении модулей и виртуальных хостов.
Модули располагаются в папках mods-available и mods-enabled. Сразу хотелось бы разъяснить разницу между этими папками. в папке mods-available лежат модули, которые доступны(читай установлены) для апача, в то время как mods-enabled лежат подключенные в данный момент модули. Включение выключение модулей осуществляется с помощью утилиты a2enmod и a2dismod, которые соответственно включают(создают символическую ссылку в папке mods-enabled на файл в папке mods-available) и выключают(удаляют эту ссылку) модули. Тоже самое характерно для папки с виртуальными хостами, только команды здесь a2ensite и a2dissite. На самом деле вы можете располагать файлы с модулями и виртуальными хостами где угодно, лишь бы в apache2.conf присутстовала ссылка на них через Include. Только в этом случае символические ссылки создавать и удалять придется самим, утилиты работать не будут.
Вот в общем-то вся магия конфигурационных файлов Апача.
2. Модули Apache.
Ну что такое модули, я думаю, объяснять не требуется, это всяческие расширения функциональности основного продукта, в данном случае для Apache. О располождении модулей мы уже знаем, существующие в системе располагаются в mods-available, подключенные в данный момент mods-enabled. Список модулей которые были вкомпилированны в апач можно узнать командой apache2ctl -l, у меня список выглядит так:
Список всех модулей, которые в данный момент подключены к апачу можно посмотреть командой apache2ctl -M, где (static), после модуля означает, что модуль вкомпилирован в апач, а (shared) - что подключен как внешний.
Посмотрим как подключается модуль, на примере модуля для обработки PHP кода - php5.so. Если вы устанавливали модуль средствами дистрибутива, то проблем возникнуть не должно. И так? заглянем в папку mods-available, там мы можем наблюдать 2 файла: php5.load и php5.conf. Первый файл содержит что-то наподобии этого:
Как не трудно догадаться, здесь мы указываем Апачу что нужно загрузить модуль php5_module из файла /usr/lib/apache2/modules/libphp5.so.
В общем-то назначение любого файла с расширением .load это указать Апачу какой модуль откуда надо загрузить и не более, гораздо интереснее обстоят дела с файлом php5.conf:
Директива - проверка на загруженость модуля, и если модуль(в данном случае mod_php5.c загружен, то выполнить то, что прописано внутри директивы. А именно добавить новый тип данных, который указывает Апачу как нужно обрабатывать те или иные файлы. В данном случе файлы с расширением php .phtml .php3 Апач обработает как x-httpd-php, т.е. передаст их на обработку интерпретатору PHP, который выполнит код находящийся в файлах и отдаст результат обратно Апачу, который выдаст его пользователю. Каждый файл типа *.conf имеет свой формат и зависит от модуля, к которому он относится, этими файлами конфигурируется работа модуля и его поведение.
Для того, чтобы подключить модуль нужно набрать команду a2enmod php5:
И как нам подсказывают, перезапустить Апач, для того, чтобы он смог воспользоваться новым модулем, но для начала неплохо бы проверить, правильно сконфигурировали модуль, хотя бы с точки зрения синтаксических ошибок, командой apache2ctl configtest:
Ну вроде бы все ок. Можно смело перезапускаться:
Готово. Новый модуль встрою.
3. Виртуальные хосты Apache.
Апач поддерживает 2 вида виртуальных хостов, т.н Name-based(когда на одном IP-адресе содержатся несколько сайтов) и IP-based(когда на каждый сайт выделяется отдельный IP). Мы рассмотрим первый вариант, как наиболее популярный среди хостеров и вообще среди тех, кто хочет содержать у себя дома на 1ом выделнном IP несколько сайтов.
Для того, чтобы один Апач мог обрабатывать запросы сразу для нескольких сайтов, ввели понятие “Виртуальные хосты”. Вы спросите как Апач отделяет один сайт от другого, когда IP-адрес у всех сайтов один? Разгадка кроется в работе протокола HTTP. Когда мы вбиваем название сайт в браузер и жмякаем “Enter(Return ;) )”, адрес сайта, с помощью системы DNS, резолвится в IP, и мы попадаем на нужный сервер, однако в самом первом запросе http-серверу, браузер передает символьное название сайта, которое мы ввели в адресной строке и таким образом http-сервер(в нашем случае Апач), знает какой именно сайт мы запросили и с радостью отдает нам контент именно этого сайта. Вот так не хитро работают Виртуальные хосты.
Как мы разобрались выше, виртуальные хосты апача хранятся в папке sites-available и включенные в данный момент в папке sites-enabled. После осознания, что такое виртуальные хосты в принципе, конфигурировать их совсем несложно, поэтому я предлагаю разобраться с ними на примере:
Первой строкой для named-based, рекомендовано указывать IP-адрес и порт(что необязательно, в случае использования стандартного 80) того хоста, который будет отдавать контент наших виртуальных хостов, если у нас всего один IP-адрес, то мы можем указать либо его, либо поставить символ “*”, что означает, что наш виртуальный хостинг будет работать на всех интерфейсах в системе, если же у нас несколько IP-адресов, то нам нужно указать только тот, который мы хотим отдать под named-based виртуальный хостинг.
Директива Конкретизирует для какого именно виртуального хоста необходимо применить настройки, которые будут приведены внутри директивы, в нашем случае мы можем написать либо IP-адрес, либо адрес сайта, либо поставить “*”(но только в том случае, если мы в NameVirtualHost поставили “*”.
ServerName - то самое название сайта, виртуальный хостинг которого мы описываем.
ServerAlias - Алиас к названию сайта, можно как полностью, www.некоторый_сайт.ru, так и просто www.
DocumentRoot - Корневая директория сайта, тот контент, что будет отдавать.
ErrorLog - путь до лог файла с ошибками класса ERROR, файл должен быть доступен на записть пользователю, от которого запускается Апач.
CustomLog - Все остальные сообщения сервера, так же должен быть доступ на запись пользователю, от которого запущен Apache.
4. Файлы .htaccess
Файлы .htaccess предназначены для дополнительной настройки апача, например, когда нужно органичить доступ к какой-то конкретной папке на веб-сервере, подминить страницы ошибок для конкретного хоста, или как-то изменять URL-адресов. В общем штука полезная и нужная. Для того, чтобы включить поодержку .htaccess необходимо в главном файле конфигурации apache2.conf прописать:
Которая укажет веб-серверу какое должно быть имя файла и файл дополнительной конфигурации. И в директиве внести опцию AllowOverride, которая может принимать следующие значения:
All - разрешить переопределение всех значений с помощью файла .htaccess
AuthConfig - Только директивы для авторизации
FileInfo - Переопределение типов документов
Indexes - Все что касается индексации, переопределение начальной страницы, иконок, картинок и т.п.
Limit - такие параметры как Allow,Deny, Order для хостов
Options - различных настроек, типа ExecCGI, MultiVews и т.п.
Так же возможно комбинирование этих значений. В заключении хотелось бы отметить, что конфигурация .htaccess, ака и Апача в целом, требует особой внимательности за синтаксисом, а особенно за логическим следованием правил и директив. Удачной настйроки в освоении этого наимощнейшего HTTP-сервера.
PS. Как водится набор ссылок:
http://httpd.apache.org/docs/2.0/ - Официальная документация(кудаже без нее), даже что-то есть на русском.
http://masterhost.ru/support/doc/apache/ - Неплохое руководство
http://htaccess.net.ru/ - Отличный набор решений и объяснений по .htaccess
http://www.oglib.ru/apman/vhosts/examples.html - Примеры виртуальных хостов.
ite, [email protected]
Не буду говорить, что в настройке и администрировании апача я собаку съел, однако, одно время занимался им достаточно плотно, и конфигураций повидал много, поэтому и решился написать небольшую статейку про апач, модули, виртуальные хосты и .htaccess, дабы разложить знания по полочкам у себя в голове, ну и передать их(знания) дальше. Сразу хочу предупредить, что статья носит, скорее, информационный характер, нежели руководство к действию, здесь не будет готовых примеров настройки апача, но кое-что все-таки придется привести в качестве примера.
Забыл упомянуть, версия Апача, которую мы будем рассматривать - 2.x
1. Структура конфигурационных файлов Apache.
Вообще Апач конфигурируется одним файлом - apache2.conf, который располагается в /etc/apache2/ (Debian), однако, для нашего удобства, разработчики позаботились о возможности разбиения на несколько файлов, что очень и очень удобно. К примеру, нам гораздо удобней держать информацию о конфигурировании модулей в одной папке, а информацию о конфигурировании виртуальных хостов в другой. Для этого нам необходимо добавить в файл apache2.conf, на место, куда мы хотели поместить информацию о модулях или виртуальных хостах, строку:
Include /etc/apache2/имя_модуля.conf
Если хотим подключить все файлы с расширением .conf, можно поступить так:
Include /etc/apache2/blah_blah/*.conf.
Так же разработчики Апача заранее позаботились о расположении модулей и виртуальных хостов.
Модули располагаются в папках mods-available и mods-enabled. Сразу хотелось бы разъяснить разницу между этими папками. в папке mods-available лежат модули, которые доступны(читай установлены) для апача, в то время как mods-enabled лежат подключенные в данный момент модули. Включение выключение модулей осуществляется с помощью утилиты a2enmod и a2dismod, которые соответственно включают(создают символическую ссылку в папке mods-enabled на файл в папке mods-available) и выключают(удаляют эту ссылку) модули. Тоже самое характерно для папки с виртуальными хостами, только команды здесь a2ensite и a2dissite. На самом деле вы можете располагать файлы с модулями и виртуальными хостами где угодно, лишь бы в apache2.conf присутстовала ссылка на них через Include. Только в этом случае символические ссылки создавать и удалять придется самим, утилиты работать не будут.
Вот в общем-то вся магия конфигурационных файлов Апача.
2. Модули Apache.
Ну что такое модули, я думаю, объяснять не требуется, это всяческие расширения функциональности основного продукта, в данном случае для Apache. О располождении модулей мы уже знаем, существующие в системе располагаются в mods-available, подключенные в данный момент mods-enabled. Список модулей которые были вкомпилированны в апач можно узнать командой apache2ctl -l, у меня список выглядит так:
1 2 3 4 5 6 7 8 |
# apache2ctl -l |
Список всех модулей, которые в данный момент подключены к апачу можно посмотреть командой apache2ctl -M, где (static), после модуля означает, что модуль вкомпилирован в апач, а (shared) - что подключен как внешний.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# apache2ctl -M |
Посмотрим как подключается модуль, на примере модуля для обработки PHP кода - php5.so. Если вы устанавливали модуль средствами дистрибутива, то проблем возникнуть не должно. И так? заглянем в папку mods-available, там мы можем наблюдать 2 файла: php5.load и php5.conf. Первый файл содержит что-то наподобии этого:
1 2 3 |
# cat mods-available/php5.load |
Как не трудно догадаться, здесь мы указываем Апачу что нужно загрузить модуль php5_module из файла /usr/lib/apache2/modules/libphp5.so.
В общем-то назначение любого файла с расширением .load это указать Апачу какой модуль откуда надо загрузить и не более, гораздо интереснее обстоят дела с файлом php5.conf:
1 2 3 4 |
# cat mods-available/php5.conf |
Директива - проверка на загруженость модуля, и если модуль(в данном случае mod_php5.c загружен, то выполнить то, что прописано внутри директивы. А именно добавить новый тип данных, который указывает Апачу как нужно обрабатывать те или иные файлы. В данном случе файлы с расширением php .phtml .php3 Апач обработает как x-httpd-php, т.е. передаст их на обработку интерпретатору PHP, который выполнит код находящийся в файлах и отдаст результат обратно Апачу, который выдаст его пользователю. Каждый файл типа *.conf имеет свой формат и зависит от модуля, к которому он относится, этими файлами конфигурируется работа модуля и его поведение.
Для того, чтобы подключить модуль нужно набрать команду a2enmod php5:
1 2 3 |
# a2enmod php5 |
И как нам подсказывают, перезапустить Апач, для того, чтобы он смог воспользоваться новым модулем, но для начала неплохо бы проверить, правильно сконфигурировали модуль, хотя бы с точки зрения синтаксических ошибок, командой apache2ctl configtest:
1 2 3 |
# apache2ctl configtest |
Ну вроде бы все ок. Можно смело перезапускаться:
1 2 3 4 |
# /etc/init.d/apache2 restart |
Готово. Новый модуль встрою.
3. Виртуальные хосты Apache.
Апач поддерживает 2 вида виртуальных хостов, т.н Name-based(когда на одном IP-адресе содержатся несколько сайтов) и IP-based(когда на каждый сайт выделяется отдельный IP). Мы рассмотрим первый вариант, как наиболее популярный среди хостеров и вообще среди тех, кто хочет содержать у себя дома на 1ом выделнном IP несколько сайтов.
Для того, чтобы один Апач мог обрабатывать запросы сразу для нескольких сайтов, ввели понятие “Виртуальные хосты”. Вы спросите как Апач отделяет один сайт от другого, когда IP-адрес у всех сайтов один? Разгадка кроется в работе протокола HTTP. Когда мы вбиваем название сайт в браузер и жмякаем “Enter(Return ;) )”, адрес сайта, с помощью системы DNS, резолвится в IP, и мы попадаем на нужный сервер, однако в самом первом запросе http-серверу, браузер передает символьное название сайта, которое мы ввели в адресной строке и таким образом http-сервер(в нашем случае Апач), знает какой именно сайт мы запросили и с радостью отдает нам контент именно этого сайта. Вот так не хитро работают Виртуальные хосты.
Как мы разобрались выше, виртуальные хосты апача хранятся в папке sites-available и включенные в данный момент в папке sites-enabled. После осознания, что такое виртуальные хосты в принципе, конфигурировать их совсем несложно, поэтому я предлагаю разобраться с ними на примере:
1 2 3 4 5 6 7 8 9 10 |
# cat sites-enabled/некоторый_сайт.ru |
Первой строкой для named-based, рекомендовано указывать IP-адрес и порт(что необязательно, в случае использования стандартного 80) того хоста, который будет отдавать контент наших виртуальных хостов, если у нас всего один IP-адрес, то мы можем указать либо его, либо поставить символ “*”, что означает, что наш виртуальный хостинг будет работать на всех интерфейсах в системе, если же у нас несколько IP-адресов, то нам нужно указать только тот, который мы хотим отдать под named-based виртуальный хостинг.
Директива Конкретизирует для какого именно виртуального хоста необходимо применить настройки, которые будут приведены внутри директивы, в нашем случае мы можем написать либо IP-адрес, либо адрес сайта, либо поставить “*”(но только в том случае, если мы в NameVirtualHost поставили “*”.
ServerName - то самое название сайта, виртуальный хостинг которого мы описываем.
ServerAlias - Алиас к названию сайта, можно как полностью, www.некоторый_сайт.ru, так и просто www.
DocumentRoot - Корневая директория сайта, тот контент, что будет отдавать.
ErrorLog - путь до лог файла с ошибками класса ERROR, файл должен быть доступен на записть пользователю, от которого запускается Апач.
CustomLog - Все остальные сообщения сервера, так же должен быть доступ на запись пользователю, от которого запущен Apache.
4. Файлы .htaccess
Файлы .htaccess предназначены для дополнительной настройки апача, например, когда нужно органичить доступ к какой-то конкретной папке на веб-сервере, подминить страницы ошибок для конкретного хоста, или как-то изменять URL-адресов. В общем штука полезная и нужная. Для того, чтобы включить поодержку .htaccess необходимо в главном файле конфигурации apache2.conf прописать:
AccessFileName .htaccess
Которая укажет веб-серверу какое должно быть имя файла и файл дополнительной конфигурации. И в директиве внести опцию AllowOverride, которая может принимать следующие значения:
All - разрешить переопределение всех значений с помощью файла .htaccess
AuthConfig - Только директивы для авторизации
FileInfo - Переопределение типов документов
Indexes - Все что касается индексации, переопределение начальной страницы, иконок, картинок и т.п.
Limit - такие параметры как Allow,Deny, Order для хостов
Options - различных настроек, типа ExecCGI, MultiVews и т.п.
Так же возможно комбинирование этих значений. В заключении хотелось бы отметить, что конфигурация .htaccess, ака и Апача в целом, требует особой внимательности за синтаксисом, а особенно за логическим следованием правил и директив. Удачной настйроки в освоении этого наимощнейшего HTTP-сервера.
PS. Как водится набор ссылок:
http://httpd.apache.org/docs/2.0/ - Официальная документация(кудаже без нее), даже что-то есть на русском.
http://masterhost.ru/support/doc/apache/ - Неплохое руководство
http://htaccess.net.ru/ - Отличный набор решений и объяснений по .htaccess
http://www.oglib.ru/apman/vhosts/examples.html - Примеры виртуальных хостов.
ite, [email protected]