Como corrigir o erro 504 Gateway Timeout
O que é o erro 504 no WordPress?
O 504 Gateway Timeout é um código de status HTTP em que um servidor agindo como gateway (Nginx na frente do PHP, ou o Cloudflare na frente do seu host) não recebeu a resposta do servidor de origem dentro do prazo e encerrou a conexão. Diferente do 502, em que a origem responde algo inválido, no 504 ela simplesmente não responde a tempo. No WordPress, o gargalo quase sempre está no PHP-FPM ou no MySQL demorando para concluir a requisição.
Como identificar
- Mensagem “504 Gateway Timeout” ou “nginx/x.x.x 504 Gateway Time-out” no navegador.
- O erro aparece em páginas pesadas (importações, relatórios do WooCommerce, busca) e some em páginas leves.
- O site cai sob carga ou em horários de pico e volta sozinho quando o tráfego diminui.
- No error_log do Nginx aparece “upstream timed out (110: Connection timed out) while reading response header from upstream”.
Como prevenir
- Mantenha um plugin de cache de página ativo para reduzir o tempo de processamento sob carga
- Monitore consultas MySQL lentas e mantenha índices e a tabela wp_options enxutos
- Rode tarefas pesadas (backup, importação) via WP-CLI ou cron, fora do ciclo de requisição web
Causa
- PHP-FPM com worker travado ou esgotado, deixando a requisição sem resposta dentro do prazo do gateway.
- Consulta MySQL lenta (tabela sem índice, autoload inchado) que estoura o tempo de execução do PHP.
- Diretiva fastcgi_read_timeout do Nginx baixa demais para o tempo real de processamento da página.
- Plugin de backup, importação ou crawler rodando em processo longo que ultrapassa o limite do upstream.
- Cloudflare como proxy cortando a conexão em 100 segundos quando a origem demora além disso.
Como resolver
- Identifique a página que estoura o tempo: no error_log do Nginx, localize a linha "upstream timed out" e veja qual rota disparou o timeout. Isso separa um problema pontual (uma página pesada) de um gargalo geral do servidor.
- Aumente o tempo de leitura do upstream no Nginx: no bloco do PHP-FPM do site, eleve o fastcgi_read_timeout e o proxy_read_timeout para 300s e recarregue o Nginx.
fastcgi_read_timeout 300; proxy_read_timeout 300; sudo nginx -t && sudo systemctl reload nginx - Aumente o tempo de execução do PHP: no php.ini do PHP-FPM, suba o max_execution_time e o request_terminate_timeout para acompanhar o novo limite do Nginx, e reinicie o serviço.
max_execution_time = 300 request_terminate_timeout = 300 sudo systemctl restart php8.2-fpm - Desative plugins para isolar o gargalo: via FTP, renomeie a pasta wp-content/plugins para testar se um plugin de backup, importação ou cache mal configurado está prolongando a requisição além do limite.
- Otimize o banco de dados: limpe a tabela wp_options de entradas autoload inchadas e revise consultas lentas. Uma query sem índice é a causa silenciosa mais comum de 504 sob carga.
# /etc/nginx/conf.d/seusite.conf - eleva o tempo de espera pelo PHP-FPM
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
# tempo que o Nginx espera o PHP-FPM responder antes de cortar com 504
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
fastcgi_connect_timeout 60;
}














