The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Краткое введение в mod_perl (perl apache mod_perl)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: perl, apache, mod_perl,  (найти похожие документы)
From: Сгибнев Михаил <http://dreamcatcher.ru/>; Date: Mon, 8 Jun 2009 17:02:14 +0000 (UTC) Subject: Краткое введение в mod_perl Оригинал: http://dreamcatcher.ru/linux/016_modperl.html Источник: A brief introduction to mod_perl Apache в настоящее время является самым популярным web-сервером. Хотя имеется альтернатива, Apache является первым, кто смог предоставить реальный контроль, гибкость и возможности расширения. Используя mod_perl, вы можете непосредственно управлять почти каждым аспектом своего сервера, как если бы работали непосредственно с Perl. mod_perl является расширением Apache, которое устанавливается точно так же, как и другие внешние расширения. Он позволяет использовать web-серверу встроенный интерпретатор Perl, что делает быстрым и простым настройку сервера и написание различных расширений на этом языке. Даже если вы не планируете писать расширения к серверу, вы можете найти данный модуль полезным для себя, так как с его помощью можно значительно ускорить работу Perl-based CGI скриптов. Установка mod_perl Вся установка модуля заключается в инсталлировании пакета libapache2-mod-perl2: lenny:~# apt-get install libapache2-mod-perl2 Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libapache2-reload-perl libbsd-resource-perl libperl5.10 The following NEW packages will be installed libapache2-mod-perl2 libapache2-reload-perl libbsd-resource-perl libperl5.10 0 upgraded, 4 newly installed, 0 to remove and 2 not upgraded. Need to get 1201kB of archives. After this operation, 3891kB of additional disk space will be used. ... Processing triggers for man-db ... Setting up libperl5.10 (5.10.0-19) ... Setting up libapache2-mod-perl2 (2.0.4-5) ... Enabling module perl. Run '/etc/init.d/apache2 restart' to activate new configuration! Setting up libapache2-reload-perl (0.10-2) ... Setting up libbsd-resource-perl (1.28-1+b1) ... Как вы можете видеть, модуль подключается автоматически, но если этого вдруг не произошло, можно сделать это вручную(если вы выполните ручное подключение при отработавшем автоматическом, ничего страшного не случится), после чего необходимо будет перезапустить Apache: lenny:~# a2enmod perl Module perl already enabled lenny:~# /etc/init.d/apache2 restart Restarting web server: apache2 ... waiting . После установки, модуль не требует дополнительного конфигурирования. Самым простым способом увидеть его работу является выполнение скрипта perl-status. Для этого создайте файл /etc/apache2/conf.d/perl-status следующего содержания: # # make status information available at # http://example.com/perl-status/ # SetHandler perl-script PerlHandler +Apache2::Status # # But only from the local host, and our trusted # remote IP. # order deny,allow deny from all allow from 127.0.0.1 allow from your.ip.address После перезагрузки apache2, откройте страницу /perl-status, на которой вы должны увидеть массу интересного - например, переменные окружения сервера и список загруженных perl-модулей. Внимание: эта страница может предоставить данные, которые могут быть использованы злоумышленниками, поэтому доступ к ней стоит ограничить. Ускоряем скрипты Perl CGI Поскольку mod_perl представляет собой Perl, встроенный в Apache, то мы можем использовать его для ускорения работы perl-based CGI скриптов. Прибавка в скорости получается из-за отсутствия необходимости запускать интерпретатор Perl при каждом запросе скрипта. Но для получения внушительных результатов, требуется некоторая переделка самого скрипта. По умолчанию, скрипты в Debian GNU/Linux находятся в каталоге /usr/lib/cgi-bin и мы можем определить, что Apache управляет ими через mod_perl, произведя следующие изменения в нашей конфигурации: PerlModule Apache::Registry Alias /cgi-bin/ /usr/lib/cgi-bin SetHandler perl-script PerlHandler Apache::Registry PerlSendHeader On Options +ExecCGI После перезагрузки сервера (с помощью команды /etc/init.d/apache2 restart) мы уже получим некий радующий нас результат! Загружаем модули Сейчас мы напишем некий код на Perl, который заставим выполняться в рамках процесса Apache. Написанный код необходимо поместить в каталог, откуда он может быть загружен встроенным интерпретатором Perl. Обычно, mod_perl в качестве PATH использует те же самые пути, что и Perl, но я считаю, что лучше указать специфический путь. Пусть это будет /etc/apache2/perl. Чтобы указать серверу выполнять определенный скрипт перез стартом, необходимо внести следущие изменения в /etc/apache2/conf/00-mod-perl: # # Load the startup script # PerlRequire /etc/apache2/perl/startup.pl Для задания пути поиска скриптов, содержимое startup.pl будет выглядеть следующим образом: # # Add /etc/apache2/perl to the mod_perl search path. # use lib qw( /etc/apache2/perl ); # # This script had no errors (?!) # 1; Всякая полезная мелочь Одной из проблем, которые я часто наблюдаю, является то, что некоторые пользователи скачивают все статьи, опросы, блоги для offline просмотра или создания зеркала. Я не против, пока они не начинают потреблять слишком много ресурсов сервера. Но есть другой, более горький катаклизм, который выглядит примерно так: 1.2.3.4 - [30/Apr/2009:19:36:29 +0100] "GET /articles/535#comment_2 HTTP/1.0" 1.2.3.4 - [30/Apr/2009:19:36:30 +0100] "GET /articles/535#comment_3 HTTP/1.0" 1.2.3.4 - [30/Apr/2009:19:36:30 +0100] "GET /articles/535#comment_5 HTTP/1.0" 1.2.3.4 - [30/Apr/2009:19:36:31 +0100] "GET /articles/535#comment_4 HTTP/1.0" Ясно, что это работа сумасшедшего клиента (потому что фрагменты "#comment _" никогда не должны появляться в реальных запросах), но такие вещи бывает сложно обнаружить. В качестве борьбы с такими клиентами, можно использовать данный нехитрый модуль - DropClients.pm. Этот модуль выполняется для каждого поступающего запроса и выполняет следущие нехитрые действия: * Выделяет IP & User-Agent для каждого входящего запроса * Если пара IP & Agent нам не нравится, то отклоняем запрос * Если пара нравится, но запрос содержит "#", то отклоняем запрос Необходимо сохранить файл в каталоге /etc/apache2/perl/ и создать файл /etc/apache2/conf/dropclients следующего содержания: # # Load the module # PerlModule DropClients # # Ensure it is invoked as an access handler # <Location /> PerlAccessHandler DropClients </Location> Вот пример хорошего запроса: skx@gold:~$ echo -e "GET / HTTP/1.0\n" | nc lenny 80 |grep ^HTTP HTTP/1.1 200 OK И плохого запроса: skx@gold:~$ echo -e "GET /#foo HTTP/1.0\n" | nc lenny 80 |grep ^HTTP HTTP/1.1 403 Forbidden Так как мы обратились с плохим запросом, мы будем заблокированы на сервере: skx@gold:~$ echo -e "GET / HTTP/1.0\n" | nc lenny 80 |grep ^HTTP HTTP/1.1 403 Forbidden Скрипт, конечно, примитивен, но вы сможете его улучшить. А черный список находится в файле /tmp/blah. Типы скриптов Выше мы рассмотрели тип PerlAccessHandler, выполняющийся при входящем запросе. Также бывают типы PerlResponseHandler - вызывается при ответе на запрос, PerlOutputFilterHandler - вызывает фильтр, модифицирует или обновляет ответ Apache, посылаемый клиенту(например, замена слов, добавление заголовков, или сжатие). Полный список типов скриптов, вместе с примерами использования, можно посмотреть тут. Для получения дополнительной информации обратитесь к документации на mod_perl. Примечание - в данной статье используется понятие Handler, которое я заменил на "скрипт" Используемая литература: mod_perl: Cute tricks with Perl & Apache

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, CrazyFox (?), 07:41, 27/06/2013 [ответить]  
  • +/
    /etc/init.d/apache2 restart
    Syntax error on line 14 of /etc/apache2/conf.d/perl-status:
    order not allowed here
    Action 'configtest' failed.
    The Apache error log may have more information.
    failed!

    После создания файла выдаёт такую ошибку, в чём может быть проблема?

     
     
  • 2, Vladimir (??), 19:28, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я думаю вам стоит посмотреть error log ведь написано по-русски: "error log may have more information", а еще он пишет что в 14 строке где вы указали order нельзя так писать: order not allowed here.
    Учи инглиш мужик!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру