Apache: включить поддержку Perl

Автор: | 27/07/2013
 

apache_logoЗадача — добавить к Apache возможность обработки сценариев на Perl.

Система:

# uname -v
FreeBSD 9.1-STABLE

Процесс установки и настройки описан в статье FreeBSD: Apache+MySQL+PHP (LAMP) + phpMyAdmin.
Конфигурация Apache стандартная:

# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

# httpd -V
Server version: Apache/2.2.25 (FreeBSD)
Server built:   Jul 27 2013 18:12:09
Server’s Module Magic Number: 20051115:33
Server loaded:  APR 1.4.8, APR-Util 1.5.2
Compiled using: APR 1.4.8, APR-Util 1.5.2
Architecture:   32-bit
Server MPM:     Prefork
threaded:     no
forked:     yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=»server/mpm/prefork»
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=»/usr/local»
-D SUEXEC_BIN=»/usr/local/bin/suexec»
-D DEFAULT_PIDLOG=»/var/run/httpd.pid»
-D DEFAULT_SCOREBOARD=»logs/apache_runtime_status»
-D DEFAULT_LOCKFILE=»/var/run/accept.lock»
-D DEFAULT_ERRORLOG=»logs/error_log»
-D AP_TYPES_CONFIG_FILE=»etc/apache22/mime.types»
-D SERVER_CONFIG_FILE=»etc/apache22/httpd.conf»

Устанавливаем модуль mod_perl2:

# cd /usr/ports/www/mod_perl2/ && make config-recursive
# make install clean

Создадим отдельный файл настроек модуля:

# vim /usr/local/etc/apache22/Includes/mod_perl.conf
# cat /usr/local/etc/apache22/Includes/mod_perl.conf
AddHandler perl-script .pl
PerlResponseHandler ModPerl::Registry

При первом рестарте — получаем ошибку:

# apachectl restart
Performing sanity check on apache22 configuration:
Syntax error on line 2 of /usr/local/etc/apache22/Includes/mod_perl.conf:
Invalid command ‘PerlResponseHandler’, perhaps misspelled or defined by a module not included in the server configuration

Добавляем поддержку модуля mod_perl2 в конфигурацию сервера:

# vim /usr/local/etc/apache22/httpd.conf

LoadModule perl_module libexec/apache22/mod_perl.so

В блоке директив <Directory «/usr/local/www/apache22/data»> добавляем:

Options Indexes FollowSymLinks +ExecCGI

В примере рассматривается конфигурация по-умолчанию, при использовании виртуалхостов +ExecCGI необходимо добавлять в описании самого хоста. Примеры настройки VirtualHost-ов можно найти в статье Apache: примеры создания VirtualHost.

Проверяем синтаксис файла настроек Apache:

# httpd -t
Syntax OK

И перезапускаем его:

# apachectl restart
Performing sanity check on apache22 configuration:
Syntax OK
Stopping apache22.
Waiting for PIDS: 53235.
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.

Проверим, как будет обрабатываться perl-сценарий:

# echo ‘print «Hello, world!»;’ > /usr/local/www/apache22/data/index.html
#  mv /usr/local/www/apache22/data/index.html /usr/local/www/apache22/data/index.pl

Заходим на страницу — и получаем наш обработанный запрос:

Hello, world!