2006-03-05

Apache HTTP Server - конфигурация под наши нужды

И так, пора бы наш Apache и сконфигурировать. Да, мы можем, без стеснения использовать и то что есть сейчас, но, складывать проекты в директорию /webservices/apache/Apache2/htdocs не самое удобное в жизни программиста (поверьте на слово, я пытался). По этому для каждого проекта мы будем делать отдельный виртуальный сервер/хост. Это не так сложно. Нужно всего-то немножко перенастроить сервер.

### Section 1: Global Environment

Всегда проверяю, включены ли такие модули: mod_cgi, mod_info, mod_rewrite, mod_status. Для этого в файле надо найти начало списка подгружаемых модулей. Его всегда можно узнать по комментарию:
# LoadModule foo_module modules/mod_foo.so
или по длинному списку LoadModule директив. Найдите соответствующие модули и уберите перед ними символ # в начале строки. Включаем ExtendedStatus On для просмотра статуса сервера, можем поправить адрес электронной почты сервера в директиве ServerAdmin и ServerName на нам нужные (если мы не ввели верные во время инсталляции).

### Section 2: ‘Main’ server configuration

Все очень любят использовать всякие директивы для Apache хранимые не в самом httpd.conf а в .htaccess файлах (о них вы можете прочесть на сайте). Их Apache читает каждый раз при запросе, по этому, при возможности ими рекомендуют не пользоваться, а все настройки хранить в httpd.conf. Но на сервере для разработок каждый раз, во время разработки ползать в httpd.conf и перезапускать Apache - не всегда удобно, поэтому мы будем пользоваться .htaccess . Для этого, в настройках директорий с нашими файлами мы будем всегда их включать, путём установки директивы AllowOverride All. К примеру, для директории /webservices/apache/Apache2/htdocs, мы в оtделе мы по умолчанию имеем AllowOverride None, заменим на AllowOverride All.

Поставим знак комментария перед директивой UserDir - мы не будем это использовать. Не надо.
Изменим ка DirectoryIndex index.html index.html.var на DirectoryIndex index.htm index.html index.html.var
Поставим знак комментария перед директивой CustomLog logs/access.log common и уберём знак комментария перед директивой CustomLog logs/access.log combined - оно информативнее, и администраторы чаще их используют для анализа. А так как наш сервер возможно будет иметь связь с внешним миром - лучше знать немного больше.
Проверьте, нет включена ли у вас директива AddDefaultCharset. На некоторых серверах она имеет значение ISO-8859-1. Если вы намерены использовать только UTF-8 или только одну кодировку всегда (не верю в это) то установите эту кодировку для этой директивы. Если же вы, как я, работаете на большим количеством проектов с разной кодировкой (у меня ISO-8859-1, ISO-8859-13, Windown-1251, Windows-1257 и UTF-8), то рекомендую вам перевести директиву AddDefaultCharset в Off.
Раскоменнтируйте и и в разделе Allow from … впишите адреса, с которых разрешён доступ к этим ресурсам. По этим адресам мы сможем посмотреть информацию о сервере.

### Section 3: Virtual Hosts

Так как у меня нету кучи внешний IP адресов, мы будем пользоваться Name-based Virtual Hosting. Разницу и полное описание вы можете найти в документации: Apache Virtual Host documentation. Нам в нашем случае понадобиться куча доменов второго или третьего уровня, хотя можем и четвёртого, и скажем свой DNS сервер, который сможет нам это всё дать. Вам уже страшно? А вы не бойтесь. Кучу доменов четвёртого уровня мы можем получить бесплатно у (к примеру) DynDNS - они нам дадут домен третьего уровня, а при регистрации мы отметим что хотим использовать * в алиасах нашего адреса и получим нескончаемое количество доменов четвёртого уровня. Для тех, у кого нету возможности добыть интернет домой и читают эту статью с дискетки/свистка/диска (как я это делал вечерами с 1999 до 2002), советую не отчаиваться - у вас сейчас появиться свой DNS сервер, точнее у вас он уже есть. И находиться он у вас по адресу %WINDIR%\system32\drivers\etc\ и это маленький файл hosts. Открываем его в текстовом редакторе и вписываем IP[tab]домен (пример: 127.0.0.1 www.example.com) - теперь набрав введённый домен, ваш компьютер будет думать что он расположен на машине с введённым IP (да, этим пользуется некоторый AdWare программное обеспечение, переписывая в файле hosts IP адреса популярных сайтов на свои с рекламой). Уберём знак комментария перед директивой NameVirtualHost и, если мы имеем более одного IP адреса на машине, вместо * впишем тот, который будет связан с внешним миром, в противном случае он будет отвечать по всем адресам, а нам не всегда это надо. Я сейчас оставлю *, так как у меня один IP адрес и он постоянно меняется.

Перейдём к созданию виртуальных серверов/хостов. По адресу /webservices/apache/Apache2/conf мы создадим директорию vhosts, в которую будем складывать конфигурации виртуальных серверов/хостов, а в конце httpd.conf добавим директиву Include conf/vhosts/*.conf. На настоящем сервере так никогда не будет - это затормозит его старт и достаточно опасно, поэтому всё сложат в httpd.conf (хотя всё зависит от администратора и используемой конфигурации, некоторые сервера Apache часть конфигурации держат в MySQL базе данных).

Сделаем директорию /vhosts и дадим права нашему пользователю Apache на эту папку для выполнения таких операций: чтение и выполнение (RX). В ней мы сделаем директорию default, а в ней www и logs. На директорию logs нужно дать разрешение на чтение, выполнение и запись (RWX).
Итак, перейдём к конфигурации Apache. Главный конфигурационный файл у нас лежит в директории /webservices/apache/Apache2/conf и называется httpd.conf. Описание всех его директив вы можете найти по адресу http://httpd.apache.org/docs/2.0/. Откройте его в своём любимом текстовом редакторе и приготовтесь. Скажу честно - большинство директив я оставляю по умолчанию.

В директории /webservices/apache/Apache2/conf/vhosts создадим файл default.conf и в него впишем:

<VirtualHost *:80>
	ServerAdmin webmaster@example.com
	DocumentRoot "/vhosts/default/www/"
	ServerName www.example.com
	<Directory "/vhosts/default/www/">
		Options Indexes FollowSymLinks
		AllowOverride None
		Order allow,deny
		Allow from all
	</Directory>
	ErrorLog /vhosts/default/logs/error.log
	CustomLog /vhosts/default/logs/access.log combined
</VirtualHost>

К сожалению, что значит это заклинание - вам обязательно нужно разобраться самим, иначе никак - вам это потом менять по себе.

К сожалению, что значит это заклинание - вам обязательно нужно разобраться самим, иначе никак - вам это потом менять по себе.Для создания нового виртуального сервера/хоста нам нужно сделать новую директорию, радом с default и сделать новый конфигурационный файл (можно копировать default.conf изменяя пути).

Вроде бы ничего не забыл. Идём по адресу /webservices/apache/Apache2/bin/, и из командной строки запускаем: apache.exe -t что заставит наш сервер протестировать всю конфигурацию и выдать либо Syntax OK (если вы всё сделали правильно), либо сообщение об ошибке и номер строки и адрес конфигурационного файла. Чтож, раз всё ОК - запускаем наш сервер и проверить как работают нами выбранные адреса для сервера, виртуального сервера/хоста и просмотра настроек сервера.

Blog — Сергей Куракин @ 20:40
Уже комментировало (5) »
  1. Комментиров(ал|ала), AlexCo — 2006-03-31 @ 23:14

    Уважаемы мне не помогла ваша документация, видимо мои руки ростут не из того место, или вы просто что то забыли!

  2. Комментиров(ал|ала), Сергей Куракин — 2006-04-01 @ 00:13

    Что именно за проблема?

  3. Комментиров(ал|ала), Killer — 2006-08-05 @ 11:54

    Воспользовался вашй документацией но увы призапуске
    host1
    он открывается а при запуске
    host2
    он открывает host1

  4. Комментиров(ал|ала), Killer — 2006-08-06 @ 09:38

    Уже сделал сам…
    если у кого не получается мыльте если смогу поскажу..

  5. Комментиров(ал|ала), Баур — 2008-03-19 @ 13:36

    Привет, помоги сделать домен 3 уровня. Я хотел сделать http://www.forum.aptech.kz
    или имя.aptech.kz

    Как это сделать в conf apache?
    или может и в домене dns?
    Жду от вас ответа…..

RSS комментариев. TrackBack URI

Оставить свой комментарий