Назад | Перейти на главную страницу

Perl не работает с Nginx через fastcgi, не может расшифровать журналы ошибок

Я бегу CentOS 6.2, Nginx 1.2.3 после этих Инструкции по линодам получить 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 файлы на этом сайте, но они должны быть на 100% отделены от perl-fastcgi настройка, другой порт и т. д.

Как я могу решить эту проблему?

upstream: "fastcgi://127.0.0.1:8999"

вернул ошибку

(111: Connection refused)

Это означает, что на самом деле этот порт ничего не прослушивает.

Наиболее вероятная причина в том, что вы на самом деле не запустили perl-fastcgi служба.

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

Можете ли вы связаться с демоном fastcgi через его публичный IP-адрес? На данный момент вы указали адрес localhost в конфигурации nginx, возможно, он прослушивает только общедоступный сетевой интерфейс.

Я считаю, что ответом была проблема с разрешением сокета.

В моем 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 Socket, сценарий работает. Я полагаю, это связано с тем, что у моего пользователя 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;
    }