Развертывание cgi в psgi преобразованное приложение в apache
#!C:/perl/bin/perl.exe
use CGI;
my $q = CGI->new;
print $q->header('text/plain'),
"Hello ", $q->param('name');
#CONVERTED PSGI PAGE
#!C:/perl/bin/perl.exe
use CGI::PSGI;
my $app = sub {
my $env = shift;
my $q = CGI::PSGI->new($env);
return [
$q->psgi_header('text/plain'),
[ "Hello ", $q->param('name') ],
];
};
Я запускаю этот cgi.pl на сервере apache как http://localhost/cgi-bin/cgi.pl
но я не могу запустить преобразованный файл psgi.pl на сервере apache, его отображение, пожалуйста, помогите Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог выполнить ваш запрос. Свяжитесь с администратором сервера по адресу admin@example.com, чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполняли непосредственно перед этой ошибкой. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера.
1 ответ
CGI и PSGI - это две разные спецификации взаимодействия веб-сервера и внешней программы.
В CGI веб-сервер ожидает получения текстового вывода из программы, состоящего из заголовков ответа HTTP, пустой строки и HTML-кода, отображаемого программой.
Модуль CGI реализует эту логику для сервера apache, и если выходные данные программы не соответствуют, apache сообщает об ошибке 500.
В PSGI веб-сервер ожидает, что программа вернет список из трех элементов, состоящий из кода ответа HTTP, заголовков ответа HTTP и HTML-кода, отображаемого программой.
Таким образом, вы можете видеть, что программа, соответствующая спецификации PSGI, может перепутать mod_cgi.
Поэтому вам нужно установить модуль apache, который реализует PSGI, или использовать модуль Perl (документы CGI::PSGI предлагают CGI:: Emulate:: PSGI), который примет ваш список PSGI и преобразует вас в CGI.