Задача – добавить к 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!