Nginx + PHP5-FPM recortes repetidos 502

1

Eu vi uma série de perguntas aqui que destacam aleatoriamente 502 ( Nginx + PHP-FPM="Aleatório" 502 Bad Gateway ) e tempos de espera semelhantes ao usar Nginx + PHP-FPM.

Mesmo com todas as perguntas, ainda não consigo encontrar uma solução.

Usando o Ubuntu 10.10 + Nginx + PHP5-FPM + APC e cada 1 de 4 solicitações termina em um tempo limite e falha. Isso não é um problema de carga ou tráfego grande, isso acontece mesmo no ambiente de desenvolvimento com uma pessoa.

Estou fazendo isso em três máquinas de 1 GB, cada uma com as mesmas configurações e os mesmos problemas.

fastcgi_params

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  SCRIPT_NAME        $fastcgi_script_name;
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  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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;

fastcgi_param  REDIRECT_STATUS    200;

/etc/php5/fpm/main.conf

; FPM Configuration ;

;include=/etc/php5/fpm/*.conf

; Global Options ;

pid = /var/run/php5-fpm.pid

error_log = /var/log/php5-fpm.log

;log_level = notice

;emergency_restart_threshold = 0

;emergency_restart_interval = 0

;process_control_timeout = 0

;daemonize = yes

; Pool Definitions ; 

include=/etc/php5/fpm/pool.d/*.conf

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

[www]
listen = 127.0.0.1:9000

;listen.backlog = -1
;listen.allowed_clients = 127.0.0.1
;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0666

user = www-data
group = www-data

;pm.max_children = 50
pm.max_children = 15
;pm.start_servers = 20
pm.min_spare_servers = 5
;pm.max_spare_servers = 35
pm.max_spare_servers = 10
;pm.max_requests = 500
;pm.status_path = /status

;ping.path = /ping
;ping.response = pong

request_terminate_timeout = 30
;request_slowlog_timeout = 0

;slowlog = /var/log/php-fpm.log.slow

;rlimit_files = 1024
;rlimit_core = 0

;chroot = 

chdir = /var/www

;catch_workers_output = yes
    
por James 14.11.2010 / 06:44

3 respostas

1

Meu dinheiro está no fato de a APC ser a culpada. Eu estava vendo algo semelhante com apc.include_once_override = On . Desligar isso (e apc.canonicalize = On ) corrigiu para mim.

    
por 14.11.2010 / 20:32
1

Isso geralmente significa que sua configuração do Fastcgi não está configurada corretamente para os dados e cabeçalhos que você está entregando.

Você precisará jogar com as seguintes configurações no arquivo fastcgi_parms:

fastcgi_connect_timeout 90;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 1024K;
fastcgi_buffers 8 512k;
fastcgi_busy_buffers_size 1024k;
fastcgi_temp_file_write_size 1024k;
fastcgi_intercept_errors on;
fastcgi_pass_header *;

As configurações acima são do meu servidor de desenvolvimento e eu uso o FirePHP, quando as informações do cabeçalho são muito grandes (ou seja, elas preenchem os buffers) Eu acho que sempre recebo o erro 502. Por isso, tornei os buffers realmente muito grandes. Se você sabe que isso é o que seu aplicativo está fazendo, então este é um bom lugar para começar.

Eu nunca usaria as configurações acima em um servidor de produção, mas você descobrirá que as configurações connect_timeout, send_timeout, intercept_errors e pass_header geralmente são um bom lugar para começar a resolver o 502 se excesso de cabeçalho / dados não for o problema.

    
por 15.11.2010 / 05:21
0

Concordo com Ben que a APC poderia ser a culpada. Eu achei o Xcache menos propenso a erros, no entanto, é dito para ser mais antigo e menos eficiente em CPU. No entanto, como o erro 502 é difícil de rastrear, sugiro que você 'apt-get --purge remove' todos os seus pacotes php (APC e php5-fpm em particular) e siga as instruções em howtoforge funcionou fora da caixa para mim.

    
por 09.01.2011 / 04:43