我正在尝试让Plack::App::CGIBin在FreeBSD 8.2上使用Apache2和FastCGI正常工作。最终目标是能够使用此设置通过Plack提供服务,以利用一大堆旧的CGI脚本,以利用其中间件功能,但是我什至无法获得一个简单的示例。

我遵循了有关Plack::Handler::FCGIPlack::App::CGIBin本身的CPAN文档,但是不确定是否丢失了某些文档或做错了哪些文档未涵盖的内容。

这是我添加的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;
};

然后,我在/data/www/plack/test.cgi处有一个简单的CGI脚本(此文件在CGI.pm下运行良好)。

我希望对http://<domain>/plack/test.cgi/的请求(包括尾部斜杠)将返回测试脚本,但我总是在Apache错误日志中收到以下404错误,我认为这是从FastCGI服务器返回的:
FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>;

我已经在使用SetHandler fastcgi-script的目录中使用mod_fastcgi和一个简单的示例脚本来使FastCGI自己工作,至少可以使用:-)。

有人在类似情况下运作了Plack::App::CGIBin吗?我将不胜感激!

谢谢

最佳答案

我猜你需要改变

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


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

因为您的别名正在删除/ plack /

或只是改变
# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/


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

毕竟,这似乎不是Perl的问题,而是有关Apache配置的系统管理员的问题。

10-07 15:04