Подтвердить что ты не робот

Plack:: App:: CGIBin через Apache и mod_fastcgi - CGI script не найден

Я пытаюсь заставить Plack::App::CGIBin работать с Apache2 и FastCGI на FreeBSD 8.2. Конечная цель состоит в том, чтобы иметь возможность использовать эту настройку, чтобы обслуживать целую кучу устаревших сценариев CGI через Plack, чтобы воспользоваться преимуществами своих возможностей промежуточного программного обеспечения, но я не смог получить даже простой пример работы.

Я следил за документацией CPAN по Plack:: Handler:: FCGI и Plack:: App:: CGIBin, но я не уверен, что мне что-то не хватает или что-то не так, что не распространяется на эти документы.

Это конфигурация Apache, которую я добавил:

# Set up external server
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/

Команда для запуска внешнего сервера:

plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi

Сервер запускается успешно, возвращая следующее:

FastCGI: manager (pid <pid>): initialized
FastCGI: manager (pid <pid>): server (pid <pid>) started
FastCGI: server (pid <pid>): initialized

Это app.psgi:

#!/usr/bin/env plackup -s FCGI

use Plack::App::CGIBin;
use Plack::Builder;

my $app = Plack::App::CGIBin->new(
    root => '/data/www/plack',
)->to_app;

builder {
    mount "/plack" => $app;
};

Затем у меня есть простой CGI script at /data/www/plack/test.cgi (этот файл работает отлично под CGI.pm).

Я бы ожидал, что запрос на http://<domain>/plack/test.cgi/ (включая конечную косую черту) вернет тест script, но я всегда получаю следующую ошибку 404 в журнале ошибок Apache, который, я думаю, возвращается с сервера FastCGI:

FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>;

У меня есть FastCGI, который работает сам по себе, используя mod_fastcgi и простой пример script в каталоге с SetHandler fastcgi-script, поэтому, по крайней мере, это сработало: -).

Кто-нибудь получил Plack::App::CGIBin, работающий по аналогичному сценарию? Я бы очень признателен за понимание!

Спасибо

4b9b3361

Ответ 1

Я думаю, вам нужно изменить

builder {
    mount "/plack" => $app;
};

to

builder {
    mount "/" => $app;
};

потому что ваш псевдоним удаляет /plack/

или просто измените

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/

to

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/plack/

В конце концов, это не вопрос Perl, а системный администратор, о настройке Apache.