Настройка CGI. Выполнение Perl-скриптов на Apache 2
Пару дней назад у меня появилась проблема - истек срок работы триальной версии анализатора лог файлов от AlterWind. Работать с ним я начал около месяца назад, когда окончательно надоел анализатор, предоставляемый моим провайдером. Выбором долго не мучался и стал пользоваться анализатором, который красовался на первой строчке выдачи Яндекса по запросу "анализатор логов" - AlterWind Log Analyzer.
Большую часть времени я работаю с операционной системой Windows XP, поэтому и анализатор искал для этой ОС.
Никаких особых требований к анализатору логов я не предъявлял, поэтому результатами работы AlterWind Log Analyzer остался полностью удовлетворен. Но после 30 дней работы программа для продолжения своего дальнейшего функционирования стала требовать покупки лицензии .
Я не являюсь противником платного софта (также используют термин Проприетарное ПО), но, если на рынке существуют open source продукты, которые не уступают по функциональности своим платным аналогам, тогда выбор мой остается за open source.
Выбор анализатора логов
После недолгого поиска я нашел несколько open source решений:
- Webalizer - http://www.mrunix.net/webalizer/
- Visitors - http://www.hping.org/visitors/
- AWStats - http://awstats.sourceforge.net/
- Pathalizer - http://pathalizer.sourceforge.net/
Бегло оценив эти продукты, я остановился на AWStats. В нем меня подкупила хорошая интеграция с Apache и возможность полного управления через браузер. Но для своей работы он требует интерпретатор Perl! Вот мы, наконец, и подошли к основной теме сегодняшней статьи
Установка Perl для Windows
Одним из портов Perl для Windows является порт от фирмы ActiveSate - ActivePerl. Его мы и будем использовать. Скачать дистрибутив последней версии ActivePerl можно по адресу http://www.activestate.com/Products/ActivePerl/. Процесс установки очень прост. Достаточно указать только путь установки. Также инсталлятор добавит путь к perl.exe в системную переменную PATH. Теперь вы сможете запускать Perl-скрипты, просто вводя в командной строке: perl /path_to_script/script.pl.
Но, чтобы Apache смог использовать Perl в качестве обработчика CGI скриптов, необходимо правильно сконфигурировать сервер.
Настройка CGI
Есть два способа настройки сервера на выполнение Perl-скриптов.
Первый - использовать директиву ScriptAlias. Директива ScriptAlias очень похоже на директиву Alias, она также связывает URL с некоторым каталогом файловой системы. Однако, в случае со SriptAlias, предполагается, что данный каталог содержит CGI-скрипты, которые необходимо обработать обработчиком cgi-script модуля mod_cgi. Например:
ScriptAlias /cgi-1/ "C:/www/cgi-scripts/1/"
<Directory "C:/www/cgi-scripts/1/">
Order allow,deny
Allow from all
</Directory>
<Directory "C:/www/cgi-scripts/1/">
Order allow,deny
Allow from all
</Directory>
Теперь все файлы из каталога /cgi-scripts/1/ будут обрабатываться как CGI-скрипты.
Второй способ используется, когда необходимо выполнять скрипты, находящиеся вне ScriptAlias каталога. Для этого необходимо явно указать обработчик cgi-script. Делается это либо с помощью директивы AddHandler, либо SetHandler. Первая связывает обработчик с расширением файла, например AddHandler cgi-script .cgi, а вторая связывает с обработчиком все файлы в текущей блочной директиве, например:
<Directory "C:/www/cgi-scripts/2/">
SetHandler cgi-script
</Directory>
SetHandler cgi-script
</Directory>
Однако AddHandler и SetHandler, в отличие от ScriptAlias, не имеют полномочий на выполнение CGI-скриптов. Такие полномочия задаются с помощью аргумента ExecCGI директивы Options. Например:
Alias /cgi-2/ "C:/www/cgi-scripts/2/"
<Directory "C:/www/cgi-scripts/2/">
SetHandler cgi-script
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "C:/www/cgi-scripts/2/">
SetHandler cgi-script
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
Полномочия на выполнение CGI-скриптов добавлены к наследуемым опциям с помощью символа +
Тестируем CGI
Для этого создадим тестовый Perl-скрипт test.pl со следующим содержанием:
#!perl.exe
print "Content-type: text/plain\r\n\r\n";
print "Server’s environment\n";
foreach ( keys %ENV ) {
print "$_\t$ENV{$_}\n";
}
print "Content-type: text/plain\r\n\r\n";
print "Server’s environment\n";
foreach ( keys %ENV ) {
print "$_\t$ENV{$_}\n";
}
Первая строка должна указывать на путь, где находится интерпретатор Perl (в нашем случае, так как путь к Perl.exe прописан в системной переменной PATH, можно обойтись строчкой #!perl.exe), в противном случае вы получите ошибку: Invalid argument: couldn’t create child process.
Теперь копируйте этот файл в каталог C:/www/cgi-scripts/1/ или в C:/www/cgi-scripts/2/ и вводите в браузере: http://yoursite/cgi-1/test.pl или http://yoursite/cgi-2/test.pl соответственно.
В результате вы должны увидеть список серверных переменных:
Server’s environment
SCRIPT_NAME /cgi-bin/test.pl
SERVER_NAME localhost
SERVER_ADMIN your@e-mail.ru
HTTP_ACCEPT_ENCODING gzip,deflate
HTTP_CONNECTION keep-alive
…
SCRIPT_NAME /cgi-bin/test.pl
SERVER_NAME localhost
SERVER_ADMIN your@e-mail.ru
HTTP_ACCEPT_ENCODING gzip,deflate
HTTP_CONNECTION keep-alive
…
Если это так, то все ок - CGI-скрипты работают. Ну, а если нет, тогда пишите мне на e-mail: info@apachedev.ru - попробую помочь.
Ну, а в следующей статье расскажу вам как установить анализатор логов - AWStats.
Автор: Сипягин Максим
Источник: ApacheDev.ru
Источник: ApacheDev.ru
Для чистоты работы надо еще только первую часть, что касаемо AWStats. Это чисто и красиво ляжет в следующую статью.
Извини, что напрягаю.
Комментарий от Alexey A. Ukhov — Сентябрь 12, 2006 @ 7:39 am
Комментарий от Администратор — Сентябрь 12, 2006 @ 10:39 am
Комментарий от Danila — Октябрь 25, 2006 @ 9:52 pm
Комментарий от Raduga — Декабрь 26, 2006 @ 10:34 am
Комментарий от Raduga — Декабрь 26, 2006 @ 10:37 am
1. как в виндоусе настроить локалный сервер на на выполнение Perl-скриптов.
2. Как задать права на скрипт и на папку где будет лежать скрипт
Тотал команер просто пишет чот не находит файла
Комментарий от bumba — Июль 17, 2007 @ 11:30 pm
Комментарий от Dmitry — Июль 24, 2007 @ 7:09 am
Firefox хочет открыть/сохранить файл awstats.pl.
Как сделать чтобы он выполнялся на сервере ?
AddHandler, AddType - прописано
LoadModule perl_module - это на всякий случай, но и без него должно работать.
Помогите. Спасибо.
Комментарий от Sasha — Август 13, 2007 @ 6:18 pm
Подскажите плиз, кто знает))
Комментарий от MuRADiN — Декабрь 5, 2007 @ 6:46 pm
В данном случае, как и в примере автора, нужно прописывать заголовок объясняющий браузеру что вы ему подсовываете:
print “Content-type: text/plain\r\n\r\n”; (или text/html, понятно зачем?)
Комментарий от Max — Июль 30, 2008 @ 12:10 pm
_______________________________
http://www.automobileit.info/
Комментарий от андрюха — Сентябрь 4, 2008 @ 7:30 pm
Комментарий от t130 — Ноябрь 20, 2008 @ 12:22 pm
Комментарий от Георгий — Декабрь 10, 2008 @ 10:28 am
Комментарий от Арни — Январь 5, 2009 @ 4:16 pm
Комментарий от Людмила — Февраль 11, 2009 @ 9:26 pm
Подскажите плиз, кто знает)))
Комментарий от Юрий — Февраль 27, 2009 @ 8:39 pm
Мини-игры
Дети
Юмор
Комментарий от Мини-игры бесплатные — Март 2, 2009 @ 2:37 pm
Комментарий от Злата — Март 2, 2009 @ 6:44 pm
Комментарий от Валерий — Март 5, 2009 @ 11:17 am
Комментарий от Юрия — Март 15, 2009 @ 12:19 am
Комментарий от Арина — Март 15, 2009 @ 9:59 pm
1. как в виндоусе настроить локалный сервер на на выполнение Perl-скриптов.
2. Как задать права на скрипт и на папку где будет лежать скрипт
Тотал команер просто пишет чот не находит файла
Комментарий от Арнольд — Апрель 16, 2009 @ 6:31 pm
Комментарий от Инга — Апрель 16, 2009 @ 9:46 pm
Комментарий от Ярослав — Апрель 17, 2009 @ 6:29 pm
Комментарий от Аделина — Апрель 20, 2009 @ 11:20 am