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.
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
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.
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.
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.