СтатьиУправление веб-сервером Apache с помощью механизма .htaccess
ВступлениеВ подавляющем большинстве случаев для unix-хостинга используется веб-сервер Apache. Это программа, которая осуществляет прием http-запросов, их обработку и выдачу посетителю сервера конечного результата — html-документов, картинок, файлов и так далее. Домашняя страница проекта Apache — http://www.apache.org.
Apache может настраиваться через файл конфигурации, в который администратор помещает инструкции, непосредственно влияющие на функционирование веб-сервера. Обычно в условиях хостинга конечные пользователи не имеют доступа к файлу конфигурации (
Учитывая эти реалии, а также стремясь добавить в Apache возможности более гибкой настройки, авторы этого веб-сервера реализовали допустимость децентрализованного управления конфигурацией с помощью использования специальных файлов, которые помещаются на диске прямо в веб-пространстве виртуального сервера. Эти файлы обычно называются
Действие команд из файла
Синтаксис файлов
Список всех директив Apache можно посмотреть тут. В описании каждой директивы есть поле Context. Оно указывает на то, откуда может исполняться данная директива. Если в описании нужной команды в поле
Теперь перейдем к практике. Сначала нужно создать в каком-то каталоге веб-сервера файл
Далее мы рассмотрим наиболее полезные и часто используемые пользователями хостинга директивы, которые могут быть вызваны из DirectoryIndex — переопределение файла по умолчанию
Обычно принято файл, который открывается веб-сервером при обращении к каталогу, называть именем DirectoryIndex 123.php3 /cgi-bin/index.pl При обращении к каталогу Apache попытается найти один из указанных файлов и показать посетителю его содержимое, а если сделать этого не получится, сервер выдаст пользователю список файлов в каталоге. Options -Indexes — запрет выдачи листинга пустого каталогаИногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, листинг, то есть список файлов в каталоге, не выдавался. В этом случае можно попробовать добавить в .htaccess такую строчку:
Options -Indexes
В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку ErrorDocument — обработка ошибокИногда в работе сервера возникают ошибки. Здесь речь идет не о сбоях в работе программного обеспечения, а об ошибках в терминах интернет-стандарта на протокол HTTP — RFC2616. Вообще, в RFC ошибки называются "Status Codes", но мы их будем называть именно ошибками — так привычнее. Теория такова: клиент присылает на сервер HTTP-запрос, сервер выполняет какие-то операции и возвращает клиенту код возврата и некоторые данные, текстовые или двоичные — вот что происходит каждый раз, когда Вы с помощью своего браузера обращаетесь к любому веб-серверу.
Код возврата — это трехзначное число, на основании которого можно судить о том, насколько успешно был обработан запрос. Так, например, коды возврата, начинающиеся с цифр 1, 2 или 3, являются положительными. А вот если веб-сервер вернул вам код, начинающийся на 4 или 5, то явно произошла какая-то ошибка. Код
Вот список ошибок 400 - Bad Request 401 - Unauthorized 402 - Payment Required 403 - Forbidden 404 - Not Found 405 - Method Not Allowed 406 - Not Acceptable 407 - Proxy Authentication Required 408 - Request Time-out 409 - Conflic 410 - Gone 411 - Length Required 412 - Precondition Failed 413 - Request Entity Too Large 414 - Request-URI Too Large 415 - Unsupported Media Type 500 - Internal Server Error 501 - Not Implemented 502 - Bad Gateway 503 - Service Unavailable 504 - Gateway Time-out 505 - HTTP Version not supported Детальное описание каждого кода можно найти в RFC2616.
При возникновении ошибки
Рассмотрим примеры. Допустим, пользователь обратился к документу, которого не существует на сервере. Такое может произойти по разным причинам: где-то осталась ссылка на уже удаленный Вами документ, кто-то дал пользователю неправильную ссылку или пользователь допустил ошибку, когда набирал адрес страницы в браузере. В этом случае сервер выдаст ошибку
Итак, создаем документ, который будем показывать пользователю в случае возникновения ошибки ErrorDocument 404 /missing.html
Все! Теперь при возникновении ошибки Таким образом можно обработать практически все негативные коды возврата. Конечно, можно обработать и позитивные коды, но смысл этого не до конца ясен, равно как непонятно в какой ситуации это может пригодиться :).
Стоит упомянуть об одной особенности браузера MS Internet Explorer версии 5. Если файл Более подробно об обработке ошибок можно прочитать в документации по Apache на странице "Custom error responses". AddType — переопределение типов данных и кодировок
У многих пользователей интернет, когда они начинают чуть глубже изучать технологии, возникает вопрос типа : "А как браузер узнает, какие документы надо показывать как html, какие как текст и как сделать так, чтобы определенные документы браузер не показывал сразу, а выдавал меню, позволяющее сохранить файл на диск?".
Для этого применяются так называемые
Работает это так: веб-сервер знает, что, например, файлам с расширением
# telnet host.ru 80
Connected to host.ru.
HEAD /index.html HTTP/1.1
Host: host.ru
HTTP/1.1 200 OK
Date: Wed, 18 Jul 2001 14:51:10 GMT
Last-Modified: Mon, 02 Jul 2001 07:41:37 GMT
Connection: close
Content-Type: text/html
Браузер, получив такой заголовок, знает, что документ с типом данных
То есть, браузеры имеют представление о том, каким образом нужно обрабатывать конкретные типы данных. Естественно, набор типов данных, известный браузерам, ограничен. Обусловлено это тем, что со временем появляются все новые и новые приложения для интернета, которые зачастую работают с новыми типами данных, которых раньше просто не существовало. Например, еще лет пять назад не было типа
Хорошо, с выдачей типов и обработкой их браузерами мы разобрались. А теперь появился вопрос: как сказать серверу о том, что нужно выдавать такой тип данных, который он в данный момент не знает? Ведь хоть Apache по умолчанию и хранит описания более чем трехсот типов данных, но ведь появляются все новые и новые! Или вот еще задачка: как сделать так, чтобы файлы с расширением
Допустим, вы хотите, чтобы файлам с расширением AddType "text/html" .ext После того, как это будет сделано, Apache будет работать с той функциональностью, которой мы добивались. Существует некий набор типов данных, который описывает большинство используемых в интернете форматов. Получить его можно на странице http://www.iana.org/assignments/media-types/.
Еще одна очень важная и востребованная возможность реализуема с использованием В таких случаях нужно явно указывать кодировку, в которой выполнены соответствующие страницы. Без этого браузер не поймет как нужно отображать национальные символы, которые находятся в документе. Более того, если для всего сервера выдается кодировка windows-1251, естественно, финские страницы будут выданы браузеру тоже с кодировкой windows-1251 в заголовке, что приведет к стопроцентно неправильному отображению.
Итак, учимся выдавать нужную кодировку. Как уже говорилось, документы на другом языке лежат у нас в подкаталоге AddType "text/html; charset=iso-8859-1" .html
В результате для всех файлов с расширением
# telnet host.ru 80
Connected to host.ru.
HEAD /fin/test.html HTTP/1.1
Host: host.ru
HTTP/1.1 200 OK
Last-Modified: Wed, 18 Jul 2001 16:29:30 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1
Кодировку iso-8859-1 в данном случае мы использовали потому что финский язык это именно iso-8859-1. Это общий набор символов для большинства западноевропейских языков. Узнайте какой Auth* — защита паролем
Еще можно использовать .htaccess для установки пароля на доступ к определенным страницам или разделам вашего сайта. Делается это путем создания в нужном подкаталоге файла AuthType Basic AuthName "this is a test of protected realm" AuthUserFile /path/to/file/with/passwords require valid-user
Кроме того, нужно создать файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile. Пароли в этом файле должны быть шифрованными, чего можно достигнуть с помощью программы # htpasswd Usage: htpasswd [-cmdps] passwordfile username htpasswd -b[cmdps] passwordfile username password -c Create a new file.
Здесь мы не будем рассматривать все параметры этой команды, но вы можете сами прочитать подробности запустив Итак, изначально у нас еще нет файла с паролями и нам нужно его создать : # htpasswd -c passwords test1 New password: Re-type new password: Adding password for user test1 #
После выполнения данной операции
# cat passwords test1:zgco1KREjBY8M # А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ '-c':
# htpasswd passwords test2 New password: Re-type new password: Adding password for user test2 #
Сейчас попробуйте обратиться к тому каталогу, в котором мы размещали
В качестве параметра к директиве
require user test2 Еще можно объединить пользователей в группы и давать доступ не конкретным логинам, а группам. Это можно сделать с помощью директивы AuthGroupFile:
AuthGroupFile /path/to/file/with/groups В файле /path/to/file/with/groups создаем группы примерно так : group1: test1 test5 group2: test2 test4 group3: test1 test3
Соответственно, директиву
require group group3 Механизмы ограничения доступа, которые реализованы в Apache, позволяют очень гибко управлять правами для пользователей и групп, что является очень важной возможностью. Если углубиться в изучение предмета, вы сможете узнать и то, что логины и пароли, используемые для авторизации, можно хранить не только в файлах, но и в простейших базах данных формата BerkeleyDB - почитайте документацию по директиве AuthDBGroupFile. Еще для хранения данных авторизации можно использовать практически любую СУБД (MySQL или PostgreSQL, например), но это уже выходит за рамки данной статьи.
Order, Allow, Deny - запрет доступа для определенных посетителей
Признайтесь, ведь наверняка хоть один раз у вас было желание запретить кому-то заходить на ваш веб-сервер? И это тоже можно сделать с помощью Order Allow,Deny Deny from 195.1.1.1 Allow from All Мы запретили пользователю с IP адресом 195.1.1.1 смотреть ваш сайт. Если вместо 195.1.1.1 написать 195.1.1, то доступ будет запрещен для всей сети класса C 195.1.1.0/24. Подробнее читайте в документации по команде Deny.
В некоторых случаях при ограничении доступа бывает полезна директива <Limit GET> Order Allow,Deny Deny from 195.1.1.1 Allow from All </Limit>
то это будет означать, что мы запретили пользователю 195.1.1.1 применение метода
Обратите внимание на одну особенность: метод
Отсутствие директивы Полезная информацияApache предоставляет очень много возможностей на любой вкус. Однако, как вы понимаете, это зарубежный продукт. Одно из следствий этого — отсутствие документации на русском языке. Однако, кое-что все-таки можно найти. Ниже приводятся ссылки на русские ресурсы по Apache. Надеемся, ссылки на английском языке тоже будут вам полезны.
Вообще, в статье отражены только наиболее часто встречающиеся вопросы по
|
||||||||||||||||||||||||||||||||||||||