Как написать свой собственный обработчик (handler) Apache, используя mod_perl? Краткий обзор

| Нет комментариев
  1. Создание обработчика
  2. Запуск обработчика
  3. Полезные ссылки

Иногда возникает необходимость добавить Apache специфичную функциональность, и одним из вариантов решения данного вопроса является создание нового обработчика.

Подключенный к серверу, mod_perl предоставляет Perl-интерфейс к API Apache. Благодаря Perl-интерфейсу API Apache можно получить доступ к внутренней деятельности Apache из perl-скриптов.

Физически Apache Perl API представляет собой модуль, который работает под управлением mod_perl - Apache.pm. Apache.pm и еще несколько модулей, включены в пакет поставки mod_perl.

Apache Perl API позволяет создавать обработчики Apache на Perl для любой фазы обработки запроса.

Создание обработчика

Внутренняя структура обработчика на perl представляет собой обычный модуль, со специальным методом внутри - sub handler.

Пример кода обработчика:

package Apache::MyHandler;

use strict;
use Apache;
use Apache::Constants qw(:common OK);

sub handler {
	my $r = shift;
	...
	return OK;
}
1;

Если метод обработчика имеет отличное от handler() - название, необходимо сделать соответствующие дополнения при конфигурировании сервера.

например
PerlHandler Apache::MyHandler::not_standart_handler_name
вместо
PerlHandler Apache::MyHandler

Для реализации взаимодействия с Apache подключаем основной модуль - Apache.pm, и дополнительные (Apache::Constants, Apache::Connection, Apache::Server и т.д.) - по необходимости.

Согласно неофициальным стандартам, модуль создаваемого обработчика помещается в пространство имен Apache (package Apache::).

При вызове обработчика Apache передает ему информацию о текущей транзакции и конфигурации сервера, в виде ссылки на объект. Обработчик может манипулировать этими данными по своему усмотрению. Согласно сложившимся традициям, ссылка на объект передается переменной, которую называют $r.

После завершения работы, метод handler должен вернуть серверу определенный статусный код. Для удобства работы с кодами можно использовать модуль Apache::Constants.

Запуск обработчика

Для задания perl-обработчика определенному этапу обработки запроса, в конфигурационном файле сервера (httpd.conf) используются директивы Perl*Handler. Название каждой директивы позволяет однозначно определить, для какой стадии обработки запроса назначен обработчик.

Директивы Perl*Handler предоставляются mod_perl, и не доступны на сервере, где mod_perl не установлен.

Список допустимых директив Perl*Handler:

  • PerlChildInitHandler
  • PerlPostReadRequestHandler
  • PerlInitHandler
  • PerlTransHandler
  • PerlHeaderParserHandler
  • PerlAccessHandler
  • PerlAuthenHandler
  • PerlAuthzHandler
  • PerlTypeHandler
  • PerlFixupHandler
  • PerlHandler
  • PerlLogHandler
  • PerlCleanupHandler
  • PerlChildExitHandler

Пример подключения обработчиков:

< Directory /home/aninatalie/aninatalie.ru/cgi>
	SetHandler perl-script
	PerlInitHandler Apache::StatINC
	PerlHandler Apache::Registry
...
< / Directory>

Обработчик perl-script, указанный директивой SetHandler, означает, что запросы к файлам каталога /home/aninatalie/aninatalie.ru/cgi будут обрабатываться с помощью mod_perl. Директива PerlInitHandler назначает обработчик Apache::StatINC для стадии запроса "Header parsing". Для стадии генерации содержимого и ответа клиенту, директивой PerlHandler назначается обработчик Apache::Registry.

Стоит отметить, что директивы Perl*Handler не обеспечивают автоматическую загрузку модуля обработчика. Для загрузки модуля необходимо предварительно использовать директиву PerlModule.

Полезные ссылки

Что такое обработчик (handler) Apache?
Архитектура Apache Module API
http://xpoint.ru/forums/programming/perl/mod_perl/faq.xhtml

Комментировать





Хостинг предоставлен RU-CENTER.
Регистрация доменов. Хостинг