Error decode JSON exrate Corrigir 504 gateway time out Nginx
Formas de pagamento Abuse

Corrigir 504 gateway time out Nginx

20.02.2024, 23:31

Um erro 504 Gateway Timeout no Nginx significa que o servidor que executa o Nginx não conseguiu receber uma resposta do servidor proxy dentro do período de tempo especificado. Isso geralmente acontece porque o servidor proxy não pode processar a solicitação dentro do tempo especificado ou devido a problemas de conexão entre o Nginx e o servidor proxy.

Por que aparece o 504 Gateway Timeout

O erro ocorre quando o servidor Nginx está a ser executado no modo proxy. Isto acontece quando é utilizado o php-fpm ou o Apache. Se o traduzirmos de inglês para russo, obtemos o seguinte - o tempo de espera por uma resposta do servidor foi excedido.

Há várias razões para este comportamento:

  • o script PHP ou de outro idioma está completamente suspenso e já não devolve qualquer resposta;
  • o script está a ser executado durante muito tempo, mas o Nginx tem um intervalo configurado para reiniciar a ligação se o servidor de destino não responder ao pedido dentro do tempo previsto;
  • o servidor está sobrecarregado e não tem tempo para atender a todos os clientes e retornar respostas a todas as solicitações do Nginx.

Agora vamos falar sobre o que você pode fazer e como corrigir o erro 504 Gateway Timeout.

Como corrigir o erro 504 gateway time out Nginx?

A primeira coisa a tentar na prática é que, se o seu servidor, php-fpm ou apache não tiver recursos do sistema, como memória ou CPU, veja a RAM livre usando o comando free:

$ free -h

Você pode descobrir a carga da CPU com o comando htop:

$ htop

Se vir que o PHP está a ocupar todo o tempo da CPU, isso significa que o problema está nos recursos do servidor. Pode tentar lidar com o motor do site, otimizar o recurso ou escolher um servidor VPS potente.

A segunda opção - se foi planeado para que o script funcionasse durante muito tempo. Neste caso, é necessário configurar o Nginx para esperar por uma resposta do Apache ou do php-fpm. Para resolver o problema no caso do php-fpm, só precisa de adicionar duas linhas ao bloco de configuração do fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 significa 300 segundos; para a maioria dos scripts, isto é suficiente, mas também não é difícil definir mais, se necessário. O erro 504 também pode ocorrer quando o Nginx é utilizado como proxy para o Apache ou qualquer outro servidor Web, pelo que também é necessário configurar o tempo de espera para o proxy.

Adicione estas linhas à secção do servidor:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Neste caso, temos um tempo limite de 600 segundos.

Agora precisamos de reiniciar o Nginx:

$ sudo systemctl restart nginx

Outro motivo e sua solução se o script travar. Se executar o script, verá imediatamente o que está bloqueado, mas se os utilizadores encontrarem esse erro, trata-se de um problema mais grave. Pode ver se os seus utilizadores estão a encontrar tais erros e onde ocorrem utilizando o comando:

$ fgrep -i " 504 " /var/log/nginx/access.log

Informações mais detalhadas podem ser vistas no error.log:

$ fgrep -i " 504 " /var/log/nginx/error.log

Além disso, se o problema for o php-fpm, pode verificar quais os scripts que estão a correr lentamente utilizando a função slow-log incorporada.

Para activá-la, adicione as seguintes linhas à sua configuração de pool:

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Isso completa a instrução.