В установке данной связки ничего сильно сложного нету, но тем не менее на некоторые моменты стоит обратить внимание. Для начала ставим пакеты apache2, apache2-worker, apache2-utils, apache2-mod_perl и apache2-example-pages через Yast2 или вручную, это уже зависит от Ваших предпочтений. В заголовке статьи я специально сделал акцент на то, что настройка именно для Опенсусе, т.к. некоторые моменты при конфигурировании могут отличаться от дистрибутива к дистрибутиву. Все рассуждения и выводы будут основаны на
данной статье.
После того, как всё было успешно (а я ,надеюсь, это так и будет) установлено переходим к настройке. Для начала запустим Апач командой
service apache2 start, после этого будет выведено: Starting httpd2 (worker) done, это означает, что запуск веб сервера Apache2 c MPM Worker выполнен успешно.
Далее нам необходимо просмотреть список модулей, которые загружаются сервером, для этого можно воспользоваться командой:
apache2ctl -t -D DUMP_MODULES, как можно видеть, там нету perl_module (именно так зовётся модуль mod_perl), поэтому нам нужно сообщить серверу о том, что мы хотим использовать именно его. Список модулей, загружаемых Apache2, хранится в файле
/etc/apache2/sysconfig.d/loadmodule.conf, но его особенность в том, что все изменения в нём живут до перезапуска сервера, т.к. в это время конфиг файл затирается и приводится в первоначальную форму. Как можно понять, добавлять в этот конфиг mod_perl2 бесполезно, но куда же его прописывать? Некоторое время поломав голову, я-таки понял, что где-то есть внешний конфиг файл, где и хранится список модулей, на основе которого и создаётся
loadmodule.conf - это файл
/etc/sysconfig/apache2. Открываем его на редактирование любимым редактором текстов, например vim, ищем строку APACHE_MODULES="а здесь список модулей" и добавляем в неё mod_perl, не забывая, что имена модулей отделяются друг от друга пробелами.
Далее снова ерезапускаем Apache2 и смотрим список модулей командой
apache2ctl -t -D DUMP_MODULES, теперь же в этом списке должен появиться "perl_module (shared)". Ещё один способ убедиться в успешной загрузке mod_perl - это команда
tail -n20 /var/log/apache2/error_log, далее ищете в лог файле строку наподобие вот этой:
[Sat Jan 12 11:51:58 2008] [notice] Apache/2.2.4 (Linux/SUSE) mod_ssl/2.2.4 OpenSSL/0.9.8e
mod_perl/2.0.3 Perl/v5.8.8 configured -- resuming normal operations
Теперь попробуем запустить обычный perl cgi скрипт. Просмотрев конфиг файл
/etc/apache2/default-server.conf, можно понять, что обычным местом для CGI приложений является папка /srv/www/cgi-bin (если её нету, то Вам потребуется её создать). В указанной папке создаём файл hello.pl следующего содержания:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Standard CGI!\n";
После этого нам нужно поставить права 755 для файла hello.pl, для этого можно использовать команду
chmod a+rx hello.pl. Всё, можете пробовать открыть ссылку http://127.0.0.1/cgi-bin/hello.pl, если отобразится "Standard CGI!", то с настройкой обычного CGI мы закончили. Переходим непосредственно к настройке к mod_perl.
Создадим папку для наших mod_perl2 приложений -
mkdir /srv/www/cgi-fast. Далее переименуем старый конфиг mod_perl2
mv /etc/apache2/conf.d/mod_perl.conf /etc/apache2/conf.d/conf_old, т.к. мы его будем заменять на новый, а старый лишь сохраняем на всякий случай, вдруг пригодится.
Создаём файл /etc/apache2/conf.d/mod_perl.conf следующего содержания:
Alias /cgi-fast/ /srv/www/cgi-fast/
<IfModule mod_perl.c>
PerlRequire "/etc/apache2/mod_perl-startup.pl"
<Location /cgi-fast/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::PerlRun
# выбор конкретного модуля определяется
# условиями решаемой задачи
# более подробно про модули на search.cpan.org
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
</IfModule>
Далее в папке /srv/www/cgi-fast создаём файл test.pl следующего содержания:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Standard CGI from mod_perl folder!\n";
print $ENV{MOD_PERL};
Выставляем права
chmod a+rx test.pl, проверяем http://127.0.0.1/cgi-fast/test.pl, скрипт должен напечатать строки: Standard CGI from mod_perl folder! и mod_perl/2.0.3, что повествует о работоспособности mod_perl. Как можно понять, в этом случае мы произвели запуск обыкновенного Perl скрипта через mod_perl.
Создаём в папке /srv/www/perl-lib подпапку MyApache2 и во вновь созданной папке создаём файл Rocks.pm следующего содержания:
#file:MyApache2/Rocks.pm
#----------------------
package MyApache2::Rocks;
use strict;
use warnings;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Const -compile => qw(OK);
sub handler {
my $r = shift;
$r->content_type('text/plain');
print "mod_perl2 application rocks!!!\n";
return Apache2::Const::OK;
}
1;
Теперь добавляем в конфиг
/etc/apache2/conf.d/mod_perl.conf следующий блок:
<Location /rocks>
SetHandler perl-script
PerlResponseHandler MyApache2::Rocks
</Location>
Таким образом конфиг примет вид:
Alias /cgi-fast/ /srv/www/cgi-fast/
<IfModule mod_perl.c>
PerlRequire "/etc/apache2/mod_perl-startup.pl"
<Location /cgi-fast/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
<Location /rocks>
SetHandler perl-script
PerlResponseHandler MyApache2::Rocks
</Location>
</IfModule>
Теперь открываем http://127.0.0.1/rocks и, надеюсь, радуемся увиденному :)