Plack :: App :: CGIBin通过Apache和mod_fastcgi - 找不到CGI脚本

时间:2013-10-17 09:33:51

标签: perl apache fastcgi plack psgi

我试图在FreeBSD 8.2上使用Apache2和FastCGI让Plack::App::CGIBin工作。最终目标是能够使用此设置通过Plack提供大量遗留CGI脚本,以便利用其中间件功能,但我甚至无法得到一个简单的示例。

我已经按照Plack::Handler::FCGIPlack::App::CGIBin本身的CPAN文档进行了操作,但我不确定我是否遗漏了某些内容或做错了哪些内容未被这些文档覆盖。< / p>

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

我已经让FastCGI独立工作,使用mod_fastcgi和一个应用了SetHandler fastcgi-script的目录中的简单示例脚本,所以至少有效: - )。

是否有人Plack::App::CGIBin在类似情况下工作?我非常感谢任何见解!

由于

1 个答案:

答案 0 :(得分:1)

我猜你需要改变

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/

毕竟它似乎不是一个关于Apache配置的Perl问题,而是一个系统管理员问题。