我运行CentOS 6.2 , Nginx 1.2.3遵循这些Linode指令让Perl与Nginx一起工作我已经做了所有的事情来testing一个实际的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设置,不同的端口等100%分开。
我怎样才能解决这个问题?
upstream: "fastcgi://127.0.0.1:8999"
返回错误
(111: Connection refused)
这意味着在这个端口上没有任何事情正在监听。
最可能的原因是你并没有真正开始perl-fastcgi服务。
/etc/rc.d/init.d/perl-fastcgi start
你可以通过公共IP地址到达fastcgi守护进程吗? 目前你在nginxconfiguration中给了本地主机地址,也许它只是在公共networking接口上监听。
我相信答案是一个套接字权限问题。
在我的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,但也许不是,我还没有确定。
================================================
编辑:根用户确实有权访问套接字,但是我的nginxconfiguration文件没有指向下面提到的@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; }