我正在跑步CentOS 6.2
,Nginx 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;
}