PHP-FPM Falha ao conectar-se ao servidor FastCGI

6

Registro de erros:

[Sat Nov 22 05:24:41 2014] [error] [client xx] (2)No such file or directory: FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed 
[Sat Nov 22 05:24:41 2014] [error] [client xx] FastCGI: incomplete headers (0 bytes) received from server "/usr/lib/cgi-bin/php5-fcgi"

Bem, este arquivo /usr/lib/cgi-bin/php5-fcgi está faltando, e não há nada na pasta cgi-bin . E quando eu reiniciar o apache2, parece funcionar bem:

[Sat Nov 22 04:46:29 2014] [notice] FastCGI: process manager initialized (pid 10747)
[Sat Nov 22 04:46:29 2014] [notice] Apache/2.2.22 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_ssl/2.2.22 OpenSSL/1.0.1 configured -- resuming normal operations

/etc/apache2/conf.d/php-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
 </IfModule>

Então, o que eu faço agora?

    
por Shane 22.11.2014 / 07:01

3 respostas

8

Em suma

Eu apostaria que você não está usando o Unix Sockets na sua configuração do php-fpm. Isso ocorre porque, por padrão, o php-fpm está usando portas TCP.

Veja mais de perto sua configuração

Você decidiu usar o Unix Sockets:

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization

Portanto, você precisa ter certeza de que o php-fpm está realmente rodando nesses soquetes unix.

Caso 1 : você está realmente usando Sockets Unix

$ sudo lsof -U | grep php
// will show you
php-fpm   17330          root    5u  unix 0xf4f64800      0t0 7045381 socket
php-fpm   17330          root    7u  unix 0xf545f080      0t0 7045382 socket
php-fpm   17330          root    8u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock
php-fpm   17331        nobody    0u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock
php-fpm   17331        nobody    0u  unix 0xf55f3a80      0t0 7045383 /var/run/php5-fpm.sock

$sudo lsof -i | grep php
// should show nothing

Caso 2 : Você não está usando Unix Sockets, mas portas TCP

$ sudo lsof -U | grep php
// will show you
php-fpm   17330          root    5u  unix 0xf4f64800      0t0 7045381 socket
php-fpm   17330          root    7u  unix 0xf545f080      0t0 7045382 socket

$sudo lsof -i | grep php
php-fpm   13387    root    7u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   13388  nobody    0u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   13389  nobody    0u  IPv4 202656      0t0  TCP localhost:cslistener (LISTEN)

É muito provável que você receba essa mensagem de erro porque, na verdade, você não está usando soquetes unix com php-fpm. O motivo é que o php-fpm é configurado por padrão para usar portas tcp.

Abra o php-fpm.conf e mude para sockets unix:

sudo nano /etc/php5/fpm/pool.d/www.conf

# We don't want to use TCP ports
#listen = 127.0.0.1:9000

# We want to use Unix Sockets
listen = /var/run/php5-fpm.sock

Agora, você terá problemas de permissão no mesmo arquivo:

// modify user and group and use same user as apache (here 'nobody')
user = nobody
group = nobody

// Uncomment those lines and use same user as apache (here 'nobody')
listen.owner = nobody
listen.group = nobody
listen.mode = 0666

A configuração do PHP-FPM agora está usando o Unix Sockets, e o Apache poderá se conectar a ele.

    
por 08.04.2015 / 07:38
2

É possível que seu processo fastcgi não esteja autorizado a ler seu diretório / usr / lib / cgi-bin / porque o usuário que está executando o processo fastcgi (< strong> you ) não pertence ao mesmo grupo que o proprietário do diretório / usr / lib / cgi-bin / .

Então, tenha certeza disso:

$ stat /usr/lib/cgi-bin/

resposta:

bla bla... Uid: ( 33/www-data) Gid: ( 33/www-data)

Note : www-data is the user of Apache

Se não, faça isso:

$ sudo chown -R www-data:www-data /usr/lib/cgi-bin

agora verifique com o comando stat anterior se o usuário é www-data. Então, você tem que se adicionar (o usuário do processo fastcgi) ao grupo de usuários www-data assim:

$ sudo gpasswd -a ${USER} www-data

Agora abra /etc/php5/fpm/pool.d/www.conf com o seu editor favorito.

$ sudo nano /etc/php5/fpm/pool.d/www.conf

E descomente essas linhas:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Important : don't turn listen.mode into 666, it's not safe

sudo service apache2 restart
sudo service php5-fpm restart

E o show deve continuar:)

    
por 02.06.2016 / 14:12
0

Parece que você iniciou seu servidor da web sem executar o php5-fpm e ouvir um endereço de soquete. Se você deseja especificar "/ usr / lib / cgi-bin / php5-fcgi" como o endereço de escuta (um canal para o fpm para processar as conexões que entram nele), você precisará ter certeza de que está na configuração do fpm. "/etc/php5/fpm/pool.d/www.conf" é um caminho comum para isso.

Em seguida, na configuração do seu apache, verifique se os arquivos .php estão usando fastcgi_pass para enviar solicitações para o fpm. Parece que já está configurado para fazer isso, exceto que está esperando um soquete unix no local errado.

    
por 22.11.2014 / 08:50