Apache & PERL

если нужно чтобы Apache 2.4 обрабатывал perl-скрипты без использования mod_perl, в httpd.conf нужно раскомментировать строку для загрузки модуля mod_cgi: Код: ………… ………… <IfModule mpm_prefork_module>

#LoadModule cgi_module libexec/apache24/mod_cgi.so

</IfModule>

CGI скрипты и Apache2.4 во FreeBSD

Когда мы имеем несколько виртуальных хостов на одном айпишнике, то не всегда хорошо иметь возможность обращаться к cgi-bin скриптам, вынесенным за пределы пространства доменов куда-нибудь в /usr/local/www/apache24/cg-bin/, из любого домена.

Иногда бывает полезнее засунуть директорию с cgi-скриптами где-нибудь внутри директории виртуального хоста (создав ту же директорию cgi-bin).

Отключаем стандартную директорию cgi-bin

Чтобы имеющаяся директория /usr/local/www/apache24/cg-bin/ не шарилась между виртуальными хостами, из конфига httpd.conf надо напрочь убрать (или закомментировать) строки:

#<IfModule alias_module>
#    ScriptAlias /cgi-bin/ "/usr/local/www/apache24/cgi-bin/"
#</IfModule>

Включаем поддержку cgi

  • Сперва подключаем модуль исполнения cgi а конфиге httpd.conf: раскомментируем (впишем) строки
    LoadModule cgi_module libexec/apache24/mod_cgi.so
    LoadModule cgid_module libexec/apache24/mod_cgid.so

    А то ведь CGI иначе не заработают :-)

  • Стандартные меры безопасности Апача говорят, что внутри директрии сайта скрипты cgi-bin класть нехорошо, и Apache отказывается их исполнять. Еще бы.
  • Обходим меры безопасности. Если мы создадим внутри диектории хоста папку cgi-bin, то скрипты там не будут выполняться только до тех пор, пока в описание этой директории в httpd.conf не вставим строки

        Options +ExecCGI
        AddHandler cgi-script .cgi

Полностью этот блок стал выглядеть так:

<Directory "/usr/local/www/c/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .cgi .pl
    SSLOptions +StdEnvVars
    Require all granted
</Directory>

Без этого скрипты читались, но не исполнялись.

Правильность скриптов

CGI-scrips на perl, исправно работавшие на другой системе, могут отказаться исполняться во FreeBSD, поскольку в начале скрипта неправильно указан путь к интерпретатору perl. Я исправлял ее на

#!/usr/local/bin/perl

Заработало.

Более того. Исполняются скрипты на tcsh и других шеллах. Ужос.

unix/apache/cgi.txt · Last modified: 2017/06/08 17:21 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5