Как настроить Apache 2 для запуска скриптов Perl CGI?
Я хотел бы настроить Apache 2, работающий на Kubuntu
, для выполнения сценариев Perl CGI. Я пробовал некоторые шаги, которые мне попадались в поисковых системах, но ничего не работает.
Каков правильный способ достижения этого?
Ответы
Ответ 1
Этот пост предназначен для спасения людей, которые страдают от * невозможности правильно настроить Apache2 для Perl на Ubuntu. (Конфигурации системы, характерные для вашей машины Linux, будут указаны в квадратных скобках, например [this]).
Возможный результат неправильной настройки Apache 2:
- Браузер пытается загрузить файл .pl вместо того, чтобы выполнять и выдавать результат.
- Запретная.
- Внутренняя ошибка сервера.
Если следовать шагам, описанным ниже, с разумным интеллектом, он может пройти через упомянутые выше ошибки.
Перед началом шагов. Перейдите в /etc/hosts
файл и добавьте IP-адрес/домен-имя`, например:
127.0.0.1 www.BECK.com
Шаг 1: установите apache2
Шаг 2: Установите mod_perl
Шаг 3: Настроить apache2
откройте sites-available/default
и добавьте следующее,
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that a story for another day. Let concentrate on washing out the issue at hand)
####
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]
<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .pl
Order allow,deny
allow from all
</Directory>
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that a story for another day. Let concentrate on washing out the issue at hand)
####
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]
<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .pl
Order allow,deny
allow from all
</Directory>
Шаг 4:
Добавьте следующие строки в ваш файл /etc/apache2/apache2.conf
.
AddHandler cgi-script .cgi .pl
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>
<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
Шаг 5:
Очень важно, или, по крайней мере, я так думаю, только после этого шага я получил его для работы.
AddHandler cgi-script .cgi .pl
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>
<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
Шаг 6
Очень важно, или, по крайней мере, я так думаю, только после этого шага я получил его для работы.
Добавьте к вам следующее /etc/apache2/sites-enabled/000-default
файл
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>
Шаг 7:
Теперь добавьте свой Perl script в качестве test.pl в том месте, где вы упомянули ранее на шаге 3, как [path-where-you-want-your-.pl и-.cgi-files].
Предоставьте разрешения для файла .pl
с помощью chmod
, а затем введите webaddress/cgi-bin/test.pl
в адресной строке браузера, там вы его получили.
(Теперь многие вещи были бы лишними в этом посте. Пожалуйста, не обращайте на него внимания.)
Ответ 2
Вам нужно просмотреть журнал ошибок Apache, чтобы узнать, что такое "внутренняя ошибка сервера". Четыре наиболее вероятных случая, по моему опыту, были бы следующими:
-
Программа CGI находится в директории, в которой нет выполнения CGI. Решение. Добавьте параметр ExecCGI
в этот каталог через httpd.conf или файл .htaccess.
-
Apache настроен только на запуск CGI из выделенного каталога cgi-bin
. Решение: Переместите туда программу CGI или добавьте оператор AddHandler cgi-script .cgi
в httpd.conf.
-
Программа CGI не установлена как исполняемая. Решение (предполагая операционную систему * nix-типа): chmod +x my_prog.cgi
-
Программа CGI выходит без отправки заголовков. Решение. Запустите программу из командной строки и убедитесь, что она фактически работает, а не умирает с ошибкой времени компиляции, и b) она генерирует правильный вывод, который должен включать, как минимум, заголовок Content-Type
и пустую строку, следующую за последними заголовками.
Ответ 3
(поиск Google привел меня к этому вопросу, хотя я не просил perl)
У меня возникла проблема с запущенными скриптами (хотя bash не perl). Apache имел конфигурацию ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
, однако журнал ошибок Apache показал File does not exist: /var/www/cgi-bin/test.html
.
Пробовал помещать script в /usr/lib/cgi-bin/
и /var/www/cgi-bin/
, но ни один из них не работал.
После продолжительной сессии по поиску в Google, что взломало его для меня,
sudo a2enmod cgi
и все встало на место с помощью /usr/lib/cgi-bin/
.
Ответ 4
Как Ubuntu 12.04 (Precise Pangolin) (и, возможно, релиз или два раньше), просто устанавливая apache2
и mod-perl
через Synaptic и размещение ваших скриптов CGI в /usr/lib/cgi -bin - это все, что вам нужно сделать.
Ответ 5
Существует два способа обработки сценариев CGI, SetHandler
и AddHandler
.
SetHandler cgi-script
применяется ко всем файлам в заданном context, независимо от того, как они названы, даже index.html
или style.css
.
AddHandler cgi-script .pl
аналогичен, но применяется к файлам, заканчивающимся на .pl
, в данном контексте. Вы можете выбрать другое расширение или несколько, если хотите.
Кроме того, модуль CGI должен быть загружен и Options +ExecCGI
настроен. Чтобы активировать модуль, введите
a2enmod cgi
и перезапустите или перезагрузите Apache. Наконец, Perl CGI script должен быть исполняемым. Поэтому биты выполнения должны быть установлены
chmod a+x script.pl
и он должен начинаться с
#! /usr/bin/perl
в качестве первой строки.
Когда вы используете SetHandler
или AddHandler
(и Options +ExecCGI
) вне любой директивы, он применяется глобально ко всем файлам. Но вы можете ограничить контекст подмножеством, включив эти директивы внутри, например. Directory
<Directory /path/to/some/cgi-dir>
SetHandler cgi-script
Options +ExecCGI
</Directory>
Теперь SetHandler
применяется только к файлам внутри /path/to/some/cgi -dir, а не ко всем файлам веб-сайта. То же самое с AddHandler
внутри директивы Directory
или Location
, конечно. Затем он применяется к файлам внутри /path/to/some/cgi -dir, заканчивающимся на .pl
.
Ответ 6
Я предполагаю, что вы взглянули на mod_perl?
Вы пробовали следующий учебник?
EDIT: по отношению к вашей публикации - возможно, вы можете включить образец кода внутри вашего файла .cgi
. Возможно, даже первые несколько строк?
Ответ 7
Если вы успешно установили веб-сервер Apache и Perl, выполните следующие шаги для запуска cgi script с помощью perl в системах ubuntu.
Перед началом работы с CGI-скриптами необходимо настроить сервер Apache таким образом, чтобы он распознавал каталог CGI (где сохраняются программы cgi) и разрешает выполнение программ в этом каталоге.
-
В каталоге Ubuntu cgi-bin обычно находится в каталоге path/usr/lib, если нет, создайте каталог cgi-bin, используя следующую команду. cgi-bin должен быть на этом пути сам по себе.
mkdir /usr/lib/cgi-bin
-
Выполните следующую команду, чтобы проверить статус разрешений в каталоге.
ls -l /usr/lib | less
Проверьте, выглядит ли разрешение "drwxr-xr-x 2 root root 4096 2011-11-23 09:08 cgi- bin", если да, переходите к шагу 3.
Если не выполнить следующую команду для обеспечения соответствующего разрешения для нашего каталога cgi-bin.
sudo chmod 755 /usr/lib/cgi-bin
sudo chmod root.root /usr/lib/cgi-bin
-
Предоставить разрешение на выполнение для каталога cgi-bin
sudo chmod 755 /usr/lib/cgi-bin
Таким образом, ваш каталог cgi-bin готов к работе. Здесь вы накладываете все свои скрипты cgi на исполнение. Следующий шаг - настроить apache для распознавания каталога cgi-bin и разрешить выполнение всех программ в нем как cgi-скриптов.
Настройка Apache для запуска CGI script с использованием perl
-
Директива должна быть добавлена в конфигурационный файл сервера apache, чтобы он знал наличие CGI и расположение его каталогов. Сначала перейдите в папку конфигурационного файла apache и откройте его с помощью вашего любимого текстового редактора.
cd /etc/apache2/sites-available/
sudo gedit 000-default.conf
-
Скопируйте приведенный ниже контент в файл 000-default.conf между строкой кодов "DocumentRoot/var/www/html/" и "ErrorLog ${APACHE_LOG_DIR}/error.log"
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
-
Перезапустите сервер Apache со следующим кодом
sudo service apache2 restart
-
Теперь нам нужно включить модуль cgi, который по умолчанию присутствует в более поздних версиях ubuntu.
sudo a2enmod cgi.load
sudo a2enmod cgid.load
-
В этот момент мы можем перезагрузить веб-сервер apache, чтобы он снова считывал файлы конфигурации.
sudo service apache2 reload
Теперь часть конфигурации apache завершена, проверим ее с помощью программы cgi perl.
Тестирование
-
Перейдите в каталог cgi-bin и создайте файл cgi с расширением .pl
cd /usr/lib/cgi-bin/
sudo gedit test.pl
-
Скопируйте следующий код на test.pl и сохраните его.
#!/usr/bin/perl -w
print "Content-type: text/html\r\n\r\n";
print "CGI working perfectly!! \n";
-
Теперь дайте разрешение на выполнение test.pl.
sudo chmod 755 test.pl
-
Теперь откройте этот файл в своем веб-браузере http://Localhost/cgi-bin/test.pl
-
Если вы видите, что вывод "CGI работает отлично", вы готовы к работе. Теперь выгрузите все свои программы в каталог cgi-bin и начните их использовать.
Примечание. Не забудьте предоставить свои новые программы в разрешениях cgi-bin, chmod 755, чтобы успешно запускать его без каких-либо внутренних ошибок сервера.
Ответ 8
Для таких, как я, которые нащупывали ваш путь через учебные пособия и документы гораздо больше, чем вам нужно, чтобы узнать, и просто хотите увидеть, что работает на старте, я нашел единственное Я должен был добавить:
AddHandler cgi- script.pl.cgi
В мой файл конфигурации.
http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler
В моей ситуации это работает лучше всего, так как я могу разместить свой perl script где угодно, и просто добавить расширение .pl или .cgi.
Ответ Дейва Шеохмана также упоминает решение AddHandler.
Конечно, вы все равно должны убедиться, что права/права на свой script установлены правильно, особенно, что script будет исполняемым. Обратите внимание на то, кто "пользователь" при запуске из HTTP-запроса - например, www или www-data.