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!