Perl 无法通过 fastcgi 与 Nginx 协同工作,无法解读错误日志

Perl 无法通过 fastcgi 与 Nginx 协同工作,无法解读错误日志

我正在跑步CentOS 6.2Nginx 1.2.3遵循这些Linode 使用说明为了开始Perl工作,Nginx我已经完成了测试实际文件所需的所有工作Perl。当我执行此操作时,浏览器显示:

The page you are looking for is temporarily unavailable.
Please try again later. 

我的Nginx error-log显示如下:

2012/09/02 22:09:58 [error] 20772#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.1.102, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:8999", host: "192.168.1.10:81"

我卡在了这里。我不确定这是否重要,但我也有并spawn-fcgi要在此网站上php-fpm提供文件,但这应该与设置、不同端口等PHP完全分开。perl-fastcgi

我该如何解决这个问题?

答案1

upstream: "fastcgi://127.0.0.1:8999"

返回错误

(111: Connection refused)

这意味着实际上没有任何东西在监听该端口。

最可能的原因是您实际上并没有启动该perl-fastcgi服务。

/etc/rc.d/init.d/perl-fastcgi start

答案2

您可以通过其公共 IP 地址访问 fastcgi 守护程序吗?目前您在 nginx 配置中提供了 localhost 地址,也许它只在公共网络接口上侦听。

答案3

我相信答案是套接字权限问题。

在我的 fastcgi-wrapper.pl 中有以下两行:

sub main {
    #$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets
    $socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!
    $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
    if ($request) { request_loop()};
        FCGI::CloseSocket( $socket );
}

当我取消注释 TCPIP 套接字并注释 Unix 套接字行时,脚本可以正常工作。我认为这是因为我的 NGINX 用户没有正确的权限来使用/var/run/nginx/perl_cgi-dispatch.sock

我以为root正在运行 nginx,但可能不是,我还不确定。

================================================

编辑:root 用户确实有权访问套接字,但是我的 nginx 配置文件未指向套接字,正如 @nickgrim 在下面提到的那样。我将 site.conf 更改为以下内容,套接字正确运行了 perl 脚本(我还更改了 fastcgi_wrapper.pl 以再次使用套接字而不是 TCPIP):

location ~ \.pl|cgi$ {
        try_files $uri =404;
        gzip off;
        include /etc/nginx/fastcgi_params;
        #fastcgi_pass  127.0.0.1:8999;
        fastcgi_pass unix:/var/run/nginx/perl_cgi-dispatch.sock;
        fastcgi_index index.pl;
        fastcgi_param  SCRIPT_FILENAME  /srv/www/test1/$fastcgi_script_name;
    }

相关内容