Развертывание 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.

Другие вопросы по тегам