Error decode JSON exrate
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.
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:
Agora vamos falar sobre o que você pode fazer e como corrigir o erro 504 Gateway Timeout.
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.