034 Системный Администратор 09 2005

Page 75

web <title><!--#echo var="page _ name" --></title> </head> <body> <h1><!--#echo var="page _ name" --></h1> <hr>

Завершение будет статичным: <!-- файл завершения tail.inc --> <hr> </body> </html>

Подключающие документы будут иметь вид: <!--#set var="page _ name" value="название" --> <!--#include virtual="head.ssi" --> <p>Содержимое страницы</p> <!--#include virtual="tail.inc" -->

Как видите, документ head.ssi должен быть обработан SSI-интерпретатором, но документ tail.inc полностью статичен и в такой обработке не нуждается. Как сэкономить ресурсы сервера и производить обработку только там, где это необходимо? Мы не случайно дали включаемым файлам разные расширения. Теперь ответ прост: надо включить механизм SSI для файлов с расширением .ssi, и только для них. Для этого используем следующие конфигурационные директивы: AddHandler server-parsed .ssi AddType text/html .ssi

Первая – включает SSI-интерпретатор для .ssi-файлов. Вторая – ассоциирует их с MIME-типом text/html; это чисто косметическая мера, SSI-интерпретатор не обращает внимания на MIME-тип включаемой информации; эту директиву можно и опустить. Конечно, мы предполагаем, что SSI-интерпретация разрешена директивой Options: Options +Includes

то изменяя его атрибуты. Но есть у директивы XBitHack и большой минус – её невозможно использовать, если файловая система не допускает атрибут x. То есть под Windows эта директива абсолютно бесполезна.

Регламентируем кэширование По понятным причинам сервер не выдаёт для SSI-документов HTTP-заголовки Last-Modified и ETag, что практически полностью исключает возможность их кэширования. Это не всегда полезно, например, если информация обновляется раз в неделю, то кэширование на час-два совсем не помешало бы. К счастью, сервер может выдавать информацию о том, до какого времени данный документ сохранит свою актуальность. Передаётся она в HTTP-заголовке Expires. Управлять ею можно при помощи трёх директив: ExpiresActive, ExpiresByType и ExpiresDefault. Директива ExpiresActive допускает два значения аргумента: on или off. Она разрешает или запрещает генерирование заголовка Expires. Обратите внимание: даже если заголовок Expires разрешён, он не будет генерироваться, если он не определён для документа данного MIMEтипа. Обратное также верно: если заголовок определён, но его генерация не разрешена, то, естественно, тоже не будет генерироваться. Директива ExpiresByType описывает, как именно должно вычисляться время актуальности документа данного MIME-типа. Самый простой синтаксис таков: ExpiresByType MIME-тип <A/M>секунды

Буква A означает, что заданное количество секунд следует прибавить к текущему времени. Буква M – к дате создания/модификации файла. То есть, чтобы файлы типа text/html сохранялись в кэше в течение часа, директива должна выглядеть так: ExpiresByType text/html A3600

Следует также добавить, что такой вариант подключения SSI справедлив для Apache 1.3. В Apache 2.0 указанные директивы будут работать точно так же, потому что разработчики позаботились об обратной совместимости. Однако на самом деле механизм SSI в Apache 2.0 реализован принципиально иначе (в виде фильтра) и «правильно» подключается иначе. В этой статье я не буду касаться специфики Apache 2.0, все приведённые примеры будут работать одинаково на обоих версиях сервера, но я бы советовал пользователям второй версии хотя бы бегло просмотреть документацию – различий между версиями гораздо больше, чем может показаться. Теперь файлы с расширением .ssi будут обрабатываться, а файлы .inc будут вставляться «как есть». Кстати, можно было бы и для них прописать MIME-тип. Если переименовать все файлы затруднительно, то можно воспользоваться директивой XBitHack on. Она, как вы, наверно, знаете, предписывает SSI-интерпретатору обрабатывать файлы с установленным битом исполняемости (бит x). Это очень удобно, так как позволяет включать и выключать SSI-интерпретацию файла, не меняя его имени, а прос-

№9, сентябрь 2005

Время может быть задано и в более «читабельной» форме, например: ExpiresByType text/html "access plus 1 hours"

Если такая форма записи представляется вам более удобной, обратитесь за подробным описанием к документации на Apache. Никаких дополнительных преимуществ эта форма записи не даёт. Директива ExpiresDefault описывает, как рассчитывать время для документов, типы которых не были описаны явно с помощью ExpiresByType.

Предостережения Стоит сделать два предостережения. Во-первых, ExpiresByType – очень мощное средство. Не забывайте, что большинство CGI-сценариев выдают тип документа text/html. Используя её, следует чётко понимать, что вы описываете кэширование для любого рода информации определённого MIME-типа. Представляете недоуме-

73


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.