Ключевые слова:mod_perl, apache, perl, (найти похожие документы)
From: Техническая поддержка hosting.zenon.ru
Date: Mon, 28 Feb 2004 14:31:37 +0000 (UTC)
Subject: Небольшое введение в mod_perl
Оригинал: http://www.hosting.zenon.ru/documentation/v-www/0026.html
* Что такое mod_perl?
* Преимущества использования mod_perl.
* Как запускать cgi-скрипты с использованием mod_perl?
* Как написать свой mod_perl модуль?
* Некоторые полезные ссылки по mod_perl.
______________________________________________________________________
Что такое mod_perl?
Mod_perl - проект интеграции Apache/Perl объединяющий всю мощь языка
программирования Perl и http-серверa Apache. В результате данной
интеграции появился удобный объектно-ориентированный интерфейс к
средствам Apache API. Главное преимущество mod_perl - мощность и
скорость. Вы получаете полный доступ ко внутренним ресурсам сервера и
можете изменять его работу на любом этапе запроса -обработки.
Например, модифицировать процедуры аутентификации, логинга, обработки
запроса. Mod_perl включает в себя универсальный
модуль(Apache::Registry), который позволяет запускать уже написанные
на perl CGI-скрипты через mod_perl, что существенно ускоряет их работу
за счет кэширования скомпиленного кода. Т.е. perl-скрипт компилируется
один раз, полученный код кэшируется и при следующих обращениях к
скрипту отпадает необходимость в его компиляции. Важно отметить тот
факт, что отслеживается изменения кэшируемых скриптов, и не возникает
проблемы с "закэшировавшимися" скриптами.
С помощью mod_perl Вы можете сконфигурировать ваш httpd сервер и
обработчики в Perl (использование PerlSetVar, и <Perl> секции). Вы
можете даже определить Ваши собственные директивы конфигурации.
Преимущества использования mod_perl.
Несколькие пользователи используют на своих серверах perl-скрипты,
которые требуют достаточно большое количество ресурсов от хостинговой
машины. Как правило, это большие конференции. На наших машинах
действуют ограничения на количество процессорного времени занимаемого
одним процессом. В связи с данным ограничением возможна некорректная
работа некоторых скриптов, которые недостаточно оптимизированы. Выйти
из данной ситуации можно несколькими способами. Одним из способов
является использование mod_perl. Вам даже не нужно вносить серьезных
изменений в Ваши скрипты. Некоторые сложности, с которыми можно
столкнуться при миграции с CGI на mod_perl описаны в разделе "Как
запускать cgi-скрипты с использованием mod_perl?". Если Вы хотите
получить доступ к ресурсам Apache API, то Вам необходимо писать
mod_perl модуль. Более подробно данный вопрос описывается в разделе
"Как написать свой mod_perl модуль?".
Как запускать cgi-скрипты с использованием mod_perl?
Для использования mod_perl как замены CGI, рекомендуется внести
следующие изменения в конфигурацию сервера:
В файл httpd.conf добавьте следующие строки:
Alias /perl/ /real/path/to/perl-scripts/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
Необходимо использовать именно директиву Alias, т.к. директива
ScriptAlias c mod_perl не работает. После рестарта сервера все
обращения к скриптам расположенным в директории
/real/path/to/perl-scripts/ будут обрабатываться модулем
Apache::Registry. Обращаться к скриптам нужно следующим образом:
http://www.yourname.com/perl/script.pl
Если Вы хотите, чтобы все perl-скрипты работали через mod_perl, то
можно взять за основу расширения файлов. Внесите в httpd.conf
следующие строки:
<Files ~ "\.pl$">
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
</Files>
и все файлы на Вашем сервере, имеющие расширение .pl будут
обрабатываться через mod_perl как скрипты.
При миграции на mod_perl необходимо учитывать, что переносимый скрипт
должен соответствовать некоторым требованиям. В скрипте не должны
использоваться:
* директива require, так как Вы не сможете получить доступ к
переменным и процедурам требуемого модуля,
* директивы _DATA_ и _END_,
* функция exit(). Вместо нее используется Apache::exit()
Также необходимо знать, что скрипты осуществляющие любые прямые вызовы
методов Apache->. Если Ваш скрипт удовлетворяет данным требованиям, то
проблем с его запуском не возникнет.
Как написать свой mod_perl модуль?
Для начала необходимо написать, собственно сам модуль. Для примера
возьмем следующий модуль (Test.pm):
package Test;
use CGI qw(:all);
sub handler {
print header, start_html('Handler1 in work');
print h2("Hello world!"),br('Test1');
print end_html;
}
sub another_handler {
print header, start_html('Handler2 in work');
print h2("Hello world!"),br('Test2');
print end_html;
}
Данный модуль содержит два обработчика (хэндлера). Теперь добавим в
файл конфигурации секцию <Perl>:
# Начало секции
<Perl>
# В данной строке описываются директория,
# в которой будут лежать модули
unshift(@INC, '/bhome/part1/01/askweb/proff/mod/');
# Список модулей (если модулей несколько
# указывать через запятую)
@PerlModule = ('Test' );
# Описание хэндлеров и URI.
%Location = (
# При обращении к /test1
'/test1' => {
# Вызывается процедура handler из
# модуля Test.
'PerlHandler' => 'Test',
'SetHandler' => 'perl-script'
},
# При обращении к /test2
'/test2' => {
# Вызывается процедура another_handler
# из модуля Test.
'PerlHandler' => 'Test::another_handler',
'SetHandler' => 'perl-script'
}
);
# Завершение секции.
</Perl>
Необходимо знать, что если при описании URI какой-либо конкретный
хэндлер не указан, а просто указан модуль, то в этом модуле будет
запускаться процедура handler.
Также важным момент является то, что после внесения изменений в модуль
необходимо рестартовать сервер. В принципе, можно убрать эту
необходимость используя специальный модуль Apache::StatINC,
документацию на который можно получить, дав команду в Unix-shell:
perldoc Apache::StatINC
Некоторые полезные ссылки по mod_perl.
Ниже приводится список полезных ссылок на сайты посвященные mod_perl.
http://perl.apache.org - главный сайт разработчиков mod_perl,
http://perl.apache.org/docs/index.html - документация по mod_perl