34

我正在尝试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;
};

然后我有一个简单的 CGI 脚本/data/www/plack/test.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在类似的情况下工作过?我将不胜感激任何见解!

谢谢

4

1 回答 1

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/

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

于 2015-02-21T12:58:15.427 回答