Nginx + PHP FASTCGI FALHA - como depurar?

3

Eu tenho um servidor no AMAZON EC2 executando Nginx + PHP com PHP FASTCGI através da porta 9000.

O servidor funciona bem por alguns minutos e depois de um tempo (vários milhares de acessos neste caso) FastCGI Dies e Nginx retornam 502 Erro.

O registro do Nginx mostra

 2010/01/12 16:49:24 [error] 1093#0: *9965 connect() failed (111: Connection refused) while connecting to upstream, client: 79.180.27.241, server: localhost, request: "GET /data.php?data=7781 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site1.mysite.com", referrer: "http://www.othersite.com/subc.asp?t=10"

Como posso depurar o que está causando o FastCGI para morrer?

    
por Niro 12.01.2010 / 18:26

2 respostas

6

Eu percebo que o OP pode ter mudado agora, mas se alguém veio aqui com o mesmo problema, espero que isso ajude.

Em uma configuração padrão, o NGINX é executado como o usuário "nobody", enquanto o spawn-fcgi gera filhos php-cgi como o usuário "root". Portanto, o NGINX não consegue se conectar ao fastcgi: //127.0.0.1: 9000 com suas permissões atuais. Tudo o que você precisa fazer é alterar um pouco o comando spawn-fcgi para corrigir isso.

spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi -C 5 -U nobody

Ou você poderia usar um soquete UNIX (eu prefiro este método)

spawn-fcgi -s /var/run/fcgi.sock -f /usr/bin/php-cgi -C 5 -U nobody

E mude seu fastcgi_pass em nginx.conf para isso:

...
 location ~ \.php$ {
        fastcgi_pass   unix:/var/run/fcgi.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_$
    }
...
    
por 20.06.2010 / 23:10
0

Você pode começar examinando o que o PHP imprime no erro padrão quando ele morre. Se isso não trouxer nenhuma luz sobre o assunto, então pode ser esclarecedor ligar um strace aos processos do PHP e observá-los fazer suas coisas, e então olhar as últimas coisas que ele faz. Executar seus processos FCGI sob uma estrutura de monitoramento de processo competente, como daemontools também é uma boa ideia - é como eu gerencio todos os meus Processos PHP sob nginx.

    
por 12.01.2010 / 21:24

Tags