В категории: Apache

Маленькие настройки большого веб-сервера

Наиболее популярные директивы .htaccess

Маленькие настройки большого веб-сервераПредставьте, что вы заказали виртуальный хостинг для своего веб-сайта. Все услуги активированы, вы получили реквизиты для ftp-доступа, что делать дальше? Если ваш веб-сайт представляет собой набор статических html-страниц, остается только залить их на предоставленный сервер, после чего веб-сайт станет доступен всем желающим. Но, помимо статических html-страниц, у вас могут быть и динамические скрипты, которые желательно замаскировать, чтобы не портить адресную строку браузера посетителя ссылками вида http://www.pupkin.com/cgi-bin/super-script.cgi?action=list&mode=4. Или, может быть, вы желаете ограничить доступ к определенным частям веб-сайта, каким-либо нестандартным образом оформить ссылочную инфраструктуру, позаботиться об удобстве тех, кто будет часто посещать ваш веб-сайт? Во всех этих случаях вам необходима дополнительная конфигурация веб-сервера.

Пользователь располагает неким набором директив веб-сервера, с помощью которых он может произвести дополнительную настройку своего веб-сайта

Вероятнее всего, сервер фирмы, предоставившей вам виртуальный хостинг, будет работать под управлением одной из многочисленного семейства *nix-систем. В этом случае на нем наверняка будет установлен широко распространенный веб-сервер Apache — о его конфигурации и пойдет речь в данной статье. Настройкой веб-сервера на хостинге занимаются системные администраторы, имеющие необходимые знания и опыт. В то же время каждый отдельный пользователь располагает неким набором директив, с помощью которых он может произвести дополнительную настройку именно своего веб-сайта, не затрагивая при этом интересы других клиентов. Осуществляется это очень просто: в любом каталоге вашего веб-сайта может находиться файл с именем .htaccess (обратите внимание на точку в начале имени файла), в который записываются директивы Apache, влияющие на свойства данного каталога и всех его подкаталогов.

В данной статье вкратце описываются только наиболее популярные директивы конфигурации вашего веб-сайта, за полным же перечнем всех допустимых директив лучше обратиться к документации по веб-серверу Apache. Некоторые из приведенных ниже директив требуют определенных настроек самого веб-сервера, поэтому, если какие-то из директив не работают, не стесняйтесь обращаться в службу технической поддержки вашего хостера.

Действие директив, описанных в файле .htaccess, обычно распространяется на весь каталог, в котором расположен данный файл, а также на все его подкаталоги. Однако при необходимости можно выделить отдельную группу файлов, к которым будут относиться заданные настройки, с помощью директивы FilesMatch, в которой указывается регулярное выражение. Например:

<FilesMatch "\.(gif|jpe?g)$">
# директивы, относящиеся только к файлам с расширениями gif, jpg и jpeg
...
# все, что расположено после символа '#', считается комментарием
</FilesMatch>

В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:

Директива ErrorDocument позволяет вместо стандартных сообщений об ошибках выдавать специальные странички, выполненные в дизайне веб-сайта

В среде веб-дизайнеров считается хорошим тоном вместо стандартных сообщений об ошибках выдавать специальные странички, выполненные в дизайне веб-сайта. Для этого служит директива ErrorDocument, которая позволяет для любого существующего кода ошибки задать либо веб-страницу, либо альтернативное текстовое сообщение. Например:

# в случае ошибки «SERVER ERROR» показывается страница с другого веб-сайта
ErrorDocument 500 http://foo.example.com/cgi-bin/tester

# в случае ошибки «NOT FOUND» показывается страница с того же веб-сайта
ErrorDocument 404 /cgi-bin/bad_urls.pl

# в случае ошибки «FORBIDDEN» показывается текстовое сообщение, которое обязательно должно начинаться с кавычки (кавычка в сообщении не выводится)
ErrorDocument 403 "Sorry can't allow you access today

Директива Options позволяет задать ряд общих параметров, из которых наиболее популярны следующие: ExecCGI (разрешить выполнение CGI-скриптов*), FollowSymLinks (обрабатывать симлинки), Includes (разрешить SSI*), IncludesNOEXEC (разрешить SSI без запуска скриптов), Indexes (показывать посетителю список файлов, если в выбранном каталоге нет файла index.html или его аналога). Параметры записываются через пробел и могут иметь в начале знаки + или -, которые управляют наследованием. Например:

# включает только параметр Includes
Options Includes

# включает параметр Includes и выключает параметр Indexes, а все остальные параметры имеют значения, заданные в глобальных установках веб-сервера
Options +Includes -Indexes

Когда посетитель запрашивает ссылку на каталог (например, http://pupkin.com/docs/), и такой каталог существует, то веб-сервер отдает из данного каталога файл index.html, а при его отсутствии — либо содержимое каталога (если включена опция Indexes), либо ошибку 403 (FORBIDDEN). Если ваш веб-сайт построен на скриптах, то в качестве индексных могут использоваться файлы с другими расширениями — указать эти файлы можно с помощью директивы DirectoryIndex. Например:

DirectoryIndex index.html index.shtml index.pl index.cgi

Если вашим динамическим скриптам нужны какие-то особенные переменные окружения (environment), их можно задать при помощи следующих директив: PassEnv (передать скриптам данную переменную окружения), SetEnv (установить переменную окружения), UnsetEnv (снять переменную окружения). Перед применением этих директив лучше проконсультироваться со службой технической поддержки — весьма вероятно, что они не будут вам доступны по соображениям безопасности. Примеры:

# передать скриптам значение переменной окружения LANG
PassEnv LANG

# задать переменную окружения PERL5LIB
SetEnv PERL5LIB /home/pupkin/lib/perl

Вполне может случиться так, что ваши динамические скрипты будут иметь нестандартные расширения — в этом случае вам может понадобиться директива AddHandler. Например, если ваши скрипты написаны на perl, то не помешает добавить в .htaccess следующие строки:

Options +ExecCGI
AddHandler cgi-script .pl

При помощи системы паролей можно ограничить доступ к определенным частям веб-сайта

Допустим, что вы желаете ограничить доступ к определенной части вашего веб-сайта — это можно легко организовать при помощи системы паролей. Если посетитель попробует зайти в закрытую часть веб-сайта, то его браузер откроет окно, в котором посетитель должен будет ввести свои логин и пароль. Настройка системы паролей заключается в следующем: в отдельный текстовый файл с помощью утилиты htpasswd, входящей в состав Apache, записываются нужные логины и пароли, после чего можно ограничить доступ к любой части веб-сайта при помощи следующих директив:

# название области ограниченного доступа
AuthName «Top secret»

# тип авторизации (возможны только два варианта: Basic и Digest, но второй может не поддерживаться некоторыми браузерами, поэтому пользоваться им не рекомендуется)
AuthType Basic

# имя файла с логинами и паролями (желательно поместить этот файл вне иерархии вашего веб-сайта)
AuthUserFile /home/pupkin/.www-users

# разрешение доступа только тем пользователям, кто введет правильные логин и пароль
Require valid-user

# другой вариант директивы Require: разрешение доступа только перечисленным пользователям
# Require user ivanoff petroff

Пользователей можно объединять в группы, что позволяет ограничивать доступ на более высоком уровне. Синтаксис файла с описанием групп очень простой:

# группа: логин1 логин2
masters: pupkin
losers: ivanoff petroff sidoroff

Ограничение доступа на базе группы задается примерно так (добавляем директиву AuthGroupFile и изменяем директиву Require):

AuthName «Top secret»
AuthType Basic
AuthUserFile /home/pupkin/.www-users
AuthGroupFile /home/pupkin/.www-groups
Require group masters

В целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение

Следует помнить, что при таком ограничении доступа пароли передаются по каналам связи в открытом виде и могут быть перехвачены злоумышленниками. Поэтому в целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение*.

Если вас волнует судьба частых посетителей вашего веб-сайта, использующих медленные каналы связи, можно несколько облегчить им жизнь при помощи директив ExpiresActive, ExpiresDefault и ExpiresByType (но не забудьте предварительно выяснить в службе технической поддержки, входит ли в состав вашего веб-сервера модуль mod_expires). Идея данного подхода заключается в следующем: если на вашем веб-сайте есть объекты, которые изменяются очень редко (обычно это изображения), то можно настроить Apache таким образом, чтобы вместе с этими объектами он отдавал http-заголовок expires. В таком случае после загрузки изображения оно сохраняется в кеше браузера посетителя и будет находиться в нем вплоть до наступления указанного в http-заголовке времени. Примеры:

# включить установку http-заголовков expires
ExpiresActive on

# по умолчанию для всех элементов устанавливается дата на 1 день позднее времени запроса
# ExpiresDefault «access plus 1 days»

# альтернативная запись, разница во времени указывается в секундах (86400 секунд равны одному дню)
# ExpiresDefault A86400

# можно отсчитывать время от момента последнего изменения запрашиваемого объекта
# ExpiresDefault «modification plus 1 weeks»
# ExpiresDefault M604800

# можно задавать время отдельно для различных типов объектов

# для html-страниц
ExpiresByType text/html «access plus 10 minutes»

# для текстовых файлов
ExpiresByType text/plain «access plus 10 minutes»

# для изображений
ExpiresByType image/gif «modification plus 1 days»
ExpiresByType image/jpeg «modification plus 1 days»

Ну, и напоследок стоит упомянуть директиву AddDefaultCharset, в которой указывается кодировка вашего веб-сайта. Отсутствие этой директивы или неправильное указание кодировки приведет к тому, что некоторым посетителям придется задавать кодировку вручную в своих браузерах, а это им вряд ли понравится. Пример:

AddDefaultCharset windows-1251

Как вы, наверное, уже заметили, в данном описании не были затронуты директивы для настройки редиректов и преобразований http-ссылок (Redirect, RedirectMatch, RewriteEngine, RewriteRule, RewriteCond). Дело в том, что эти директивы применяются настолько часто и обладают настолько широкими возможностями, что о них следует написать отдельную статью.

Источник: hostinfo.ru

Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера Маленькие настройки большого веб-сервера

-