Настройка конфигурационных файлов Web-сервера - самый ответственный шаг при
его установке. Здесь мы рассмотрим только наиболее распространенные директивы и
их параметры, поскольку полный перечень с описанием займет не один десяток
страниц. Сервер перечитывает конфигурационные файлы при запуске, а также при
получении сигнала -HUP (жесткий рестарт) или -uSR1 (мягкий рестарт). Если сервер
находится в рабочем состоянии, то при изменении конфигурации его рекомендуется
перезапустить командой
# kill -USR1 `cat /usr/local/apache/logs/httpd.pid`
В этом случае имеющиеся соединения не закрываются принудительно и завершаются
обычным образом, а следующие клиенты работают уже с новыми конфигурационными
файлами.
Файл access.conf
В access.conf содержатся директивы, описывающие права доступа к каталогам и
файлам Web-сервера. Прежде всего решите, в каком каталоге будут храниться
документы. По умолчанию это /usr/local/apache/share/htdocs, однако многие
администраторы предпочитают размещать документы начиная с каталога
/www/<имя_сервера>/, поскольку при такой организации проще ориентироваться
в структуре файлов. Пусть, например, мы создали каталоги:
/www/rmt.ru/
/www/radio-msu.net/
/www/people.radio-msu.net/
Они будут корневыми для соответствующих виртуальных серверов.
Файл access.conf может содержать секции Directory, Location и Files, которые
ограничены одноименными директивами. В параметрах этих директив могут
использоваться символы "?" и "*" , а также регулярные выражения, предваряемые
тильдой, например <Directory ~"^/www.+/a?server">. В секции Directory
помещаются инструкции, относящиеся к определенному каталогу на диске, в секции
Location - относящиеся к виртуальному пути, в секции Files - относящиеся к файлу
или группе файлов.
<Directory /www/rmt.ru>
# директивы, относящиеся ко всем документам, хранящимся в
каталоге /www/rmt.ru и вложенных в него
</Directory>
<Location /cgi-bin>
# директивы, относящиеся ко всем документам, доступным по
адресу http://<имя_сервера>/cgi-bin/ <путь_к_файлу>
</Location>
<Files /www/rmt.ru/form.html>
# директивы, относящиеся к файлу form.html из каталога
/www/rmt.ru
</Files>
Различие между секциями Directory и Location состоит в том, что первая
относится к каталогам на диске, вторая - к виртуальному пути (URL), который
браузер запрашивает у Web-сервера. И в той, и в другой могут присутствовать
директивы order, allow и deny, которые позволяют ограничить доступ к каталогу
или URL с различных машин.
Следующие две директивы относятся к секции <Directory>.
Options [options ...]
Возможные значения параметров:
- ExecCGI - разрешить выполнение CGI-сценариев в данном каталоге и его
поддереве;
- FollowSymLinks - разрешить переходы по символическим ссылкам (создаваемым
командой ln);
- Includes - разрешить SSI (Server Side Includes);
- Indexes - разрешить выдачу листинга каталога, если в нем нет файла
index.html (или файла индекса, заданного директивой DirectoryIndex);
- MultiViews - разрешить поддержку многих языков; по умолчанию она отключена,
и включать ее, как правило, не нужно; поддержка перекодирования "на лету" для
русского языка устанавливается с помощью других директив, которые мы рассмотрим
позже;
- All - установить сразу все перечисленные режимы кроме MultiViews.
При отсутствии специальных требований к безопасности вполне допустимо указать
"Options All" в секции <Directory /www>; в противном случае нужно описать
параметры каждого каталога отдельно.
AllowOverride [options ...]
Большинство директив могут задаваться не только в конфигурационных файлах
сервера, но и в файлах .htaccess в каталогах сервера. Директива AllowOverride
определяет набор директив, допустимых в файлах .htaccess. Параметры могут быть
указаны следующие:
AuthConfig - разрешить установку авторизации по имени пользователя и
паролю;
FileInfo - разрешить директивы, отвечающие за типы документов;
Indexes - разрешить директивы, связанные с листингом каталогов;
Limit - разрешить команды allow и deny, которые ограничивают доступ к файлам
в зависимости от адреса клиентского компьютера;
Options - разрешить описанную выше директиву Options.
Учтите, что при включении последнего режима пользователи получают возможность
создавать собственные файлы .htaccess и разрешать в них выполнение
CGI-сценариев. Поэтому если нужно контролировать CGI-сценарии пользователей, не
следует распространять на пользовательские каталоги действие директивы
AllowOverride Options.
Однако во многих случаях (в частности, когда права на изменение содержимого
сервера есть только у администратора) файл access.conf может выглядеть так, как
в листинге 1.
Файл srm.conf
Файл srm.conf содержит директивы, связанные с общими настройками структуры
каталогов сервера. Как правило, в нем достаточно изменить лишь несколько
строк.
DocumentRoot <первый каталог сервера>
Путь к каталогу по умолчанию, индексный файл которого пользователь получит
при обращении к серверу (http://<имя_сервера>/). Эту директиву следует
задать и для каждого из виртуальных серверов (в секции <VirtualHost> файла
httpd.conf).
UserDir <имя пользовательского каталога>
Каталог, в котором пользователи должны размещать свои файлы, чтобы они были
доступны по адресу http://<имя_сервера>/~<имя_пользователя>/.
Стандартно public_html. Иногда, чтобы облегчить жизнь пользователям,
администраторы дают директиву "UserDir www".
DirectoryIndex <список файлов индекса>
Файл индекса - это тот файл, который будет передан клиенту при обращении к
каталогу. Если указать несколько имен, сервер будет искать подходящий файл
"слева направо". По умолчанию список содержит всего одно имя - index.html, но
принято добавлять в него и другие распространенные имена индексных файлов.
Например, директива может иметь вид: DirectoryIndex .index.html index.html
index.htm index.cgi index.shtml home.html home.htm default htm default html
Чтобы включить на сервере поддержку CGI-сценариев, следует убрать знак
комментария перед директивами ScriptAlias и AddHandler cgi-script .cgi. Первая
задает каталог на диске, в котором будут храниться исполняемые программы, а
вторая определяет, что все файлы с расширением .cgi должны обрабатываться как
сценарии.
Директива ErrorDocument позволяет заменять стандартные сообщения сервера об
ошибках на свои. Например, в случае самой распространенной ошибки - 404 (файл не
найден) - считается хорошим тоном выдавать пользователю страницу с предложением
продолжить свой путь по серверу или форму для поиска по узлу. Реализуется это
достаточно просто: в настройках сервера мы убираем знак комментария со
строки
ErrorDocument 404 /missing.html
B корневом каталоге каждого виртуального сервера создаем файл missing.html.
Рекомендуется дать в нем ссылки на основные разделы сервера - и для удобства
пользователей, и для того, чтобы предоставить необходимую информацию поисковым
роботам, индексирующим серверы.
Файл httpd.conf
Конфигурационный файл httpd.conf является основным и содержит настройки,
связанные с работой Web-сервера, виртуальных серверов, а также всех его
программных модулей. Кроме того, именно в нем настраивается перекодирование
русских букв при передаче от сервера к клиенту и обратно.
Директива Port, помещенная в самом начале файла, определяет номер порта для
http-сервера; по умолчанию это 80. При необходимости можно приписать серверу
другой порт или несколько портов, для чего служит директива Listen.
Директива HostnameLookups с параметром on или off включает или,
соответственно, отключает преобразование численных IP-адресов клиентов,
получивших документы с сервера, в доменные имена. Такое преобразование несколько
замедляет работу сервера, но при числе посещений менее 10 000 в сутки это, как
правило, практически не заметно.
Директивы User и Group задают пользователя, который будет администрировать
сервер. С точки зрения безопасности нежелательно указывать здесь существующего
пользователя, имеющего доступ к каким-либо другим ресурсам или файлам. Лучше
создать отдельного пользователя и группу специально для http-сервера,
например:
User www
Group www
Директивы ServerRoot, ErrorLog, CustomLog определяют соответственно корневой
каталог http-сервера, путь к журналу регистрации ошибок (error_log) и путь к
общему журналу обращений к серверу (access_log).
Директива CacheNegotiatedDocs разрешает кэширование документов, полученных с
сервера. По умолчанию этот режим отключен, но, поскольку пропускная способность
отечественных Internet-каналов еще долго будет оставлять желать лучшего, хорошо
бы его включить: тогда пользователю не придется ждать загрузки картинок при
каждом обращении к вашей странице.