Я бегу 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;
}