nginx 502 gateway ruim - fastcgi não está escutando? (Debian 5)

4

Tenho experiência com o nginx, mas ele sempre foi pré-instalado para mim (via imagem pré-configurada do VPS.net). Eu realmente gosto do que faz por mim e agora estou tentando instalá-lo em meu próprio servidor com o apt-get. Esta é uma instalação Debian 5 razoavelmente recente. Eu tenho alguns pacotes extras instalados, mas eles são todos .deb, nenhuma compilação manual ou qualquer coisa louca acontecendo.

O Apache já está instalado, mas eu o desativei. Eu fiz o apt-get install nginx e isso funcionou bem. Alterei a configuração um pouco para minhas necessidades, embora o mesmo problema que estou prestes a descrever aconteça mesmo com a configuração padrão.

Demorei um pouco para descobrir que o pacote debian padrão para o nginx não gera processos fastcgi automaticamente. Isso é muito ruim, mas eu descobri como fazer isso com esse script, que encontrei postado em muitos sites diferentes:

#!/bin/bash

## ABSOLUTE path to the PHP binary
PHPFCGI="/usr/bin/php5-cgi"

## tcp-port to bind on
FCGIPORT="9000"

## IP to bind on
FCGIADDR="127.0.0.1"

## number of PHP children to spawn
PHP_FCGI_CHILDREN=10

## number of request before php-process will be restarted
PHP_FCGI_MAX_REQUESTS=1000

# allowed environment variables sperated by spaces
ALLOWED_ENV="ORACLE_HOME PATH USER"

## if this script is run as root switch to the following user
USERID=www-data

################## no config below this line

if test x$PHP_FCGI_CHILDREN = x; then
  PHP_FCGI_CHILDREN=5
fi

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN"
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS"
ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS"

if test x$UID = x0; then
  EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID"
else
  EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT"
fi

echo $EX

# copy the allowed environment variables
E=

for i in $ALLOWED_ENV; do
  E="$E $i=${!i}"
done

# clean environment and set up a new one
nohup env - $E sh -c "$EX" &> /dev/null &

Quando eu faço um "ps -A | grep php5-cgi", vejo os 10 processos em execução, que devem estar prontos para escutar.

Mas quando tento visualizar uma página da web por meio do nginx, acabei de receber um erro de gateway 502 incorreto.

Depois de usar um pouco, tentei fazer o telnet para 127.0.0.1 9000 (o fastcgi está escutando na porta 9000 e o nginx está configurado para falar com essa porta), mas ele imediatamente fecha a conexão.

Isso me faz pensar que o problema é com o fastcgi, mas não tenho certeza do que posso fazer para testá-lo. Pode ser apenas fechar a conexão porque não está sendo alimentado nenhum dado para processar, mas ele se fecha imediatamente , o que me faz pensar de outra forma.

Então ... algum conselho? Eu não consigo descobrir. Não ajuda que seja 01:00, mas estou ficando louco aqui!

    
por Sean 12.03.2010 / 10:21

3 respostas

1

No meu servidor eu uso nginx + fcgi também.

Minha solução não é infalível, mas pelo menos funciona. Eu tenho esse script que usa spawn-fcgi e php5-cgi em /etc/init.d /

#!/bin/bash
PHP_SCRIPT='/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -f /usr/bin/php5-cgi'
RETVAL=0
case "$1" in
    start)
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    stop)
      killall -9 php5-cgi
      RETVAL=$?
  ;;
    restart)
      killall -9 php5-cgi
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

e o nginx conf relacionado é este:

server {
        location ~ .php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        include /etc/nginx/fastcgi.conf;
                        fastcgi_param SCRIPT_FILENAME /var/www/hyperblasted/$fastcgi_script_name;
        }
        ...
}

e o fastcgi.conf contém o seguinte

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

Espero que isso ajude:)

PS: Com essa configuração eu tive um problema em que o daemon cgi morreria de vez em quando. Eu trabalhei em torno deste problema, executando isso em um cronjob a cada 5 minutos:

if ps aux | grep 'php5-cgi' | grep -v grep  > /dev/null ; then
        echo "PHP-cgi is runnning !"    
else
        echo "PHP-cgi is down. Starting over..."
        /etc/init.d/php-fcgi start
fi
    
por 12.03.2010 / 11:09
0

Eu não sou especialista nisso. Na verdade, vi o seu post porque tive o mesmo problema. No entanto, parece que consegui fazê-lo funcionar e o que fiz foi alterar o USERID (www-data) do arquivo /etc/init.d/php-fastcgi para o usuário que estava executando no momento. Desculpe se isso não ajuda ou que eu não posso explicar mais nada, mas eu pensei em postá-lo caso seja relevante.

    
por 16.05.2011 / 19:30
0

Tente isto:

vim /etc/php5/fpm/pool.d/www.conf

e, em seguida, altere

; listen.owner = www-data
; listen.group = www-data

para

listen.owner = www-data
listen.group = www-data
    
por 08.04.2015 / 23:27