使用 nginx 和 FastCGI 的 Perl Web 服务 - 无法读取参数

标签 perl nginx cgi fastcgi

有很多关于如何使用 FastCGI 到 CGI 包装器来使用 nginx 提供 Perl 代码的教程。但是我自己使用 Perl 模块很舒服,所以我不需要包装器。我正在尝试找出正确的设置方法。这是我到目前为止的代码:

#!perl

use CGI;
use FCGI;

my $s = FCGI::OpenSocket(':9000',20);
my $r = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR,
    \%ENV, $s);
while ($r->Accept >= 0) {
    my $cgi = CGI->new;
    print "Content-type: text/html\n\n";
    print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>";
    $r->Finish;
}

并在 nginx 中启用它,如下所示:
location /foo {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.pl;
}

问题是无论我调用多少次脚本,param返回与启动程序后第一次调用时传递的相同值。有没有更好的方法来做到这一点?我对 CGI.pm 的替代方案持开放态度也是。

最佳答案

CGI::Fast将为您处理大部分工作,包括设置守护进程。

use CGI::Fast;

local $ENV{FCGI_SOCKET_PATH} = ":9000";
local $ENV{FCGI_LISTEN_QUEUE} = 20;

while ($q = CGI::Fast->new) {
    print $q->header;
    print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>";
}

另一种选择是Nginx::Simple这使您可以更好地控制 cgi-script-as-daemon 的行为。

关于使用 nginx 和 FastCGI 的 Perl Web 服务 - 无法读取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7206323/

相关文章:

python - 良好的 Perl 风格 : How to convert UTF-8 C string literals to\xXX sequences

docker - 同时使用nginx模板功能和重新加载解决方案

perl - 从子例程中的文件句柄引用中读取

java - 有没有办法用 Perl 连接到 Rational Team Concert?

django - 使用 Django 管理界面的 Node.js 应用程序

linux - NginX 作为多个子域的 HTTPS 反向代理?

python - Web 环境中的文件访问权限提升

python - 如何使用 `python -m SimpleHTTPServer 8000` 或 `python -m CGIHTTPServer 8000` 托管 python cgi 脚本?

java - 如何从动态服务器端 URL 加载 Java 小程序?

regex - bash - 如何从 bash 脚本中将换行符传递给 perl?