Erros de DistributedMutex aparecem frequentemente nos logs

Isso provavelmente não é causado diretamente pelo proxy reverso.

Para posts criados via API, o Discourse utiliza o DistributedMemoizer ao redor de PostsController#create para evitar a criação duplicada de posts pela API. Esse memoizer usa um DistributedMutex baseado em Redis com um tempo de validade muito curto de 1 segundo. O aviso indica que o trabalho de criação/serialização do post dentro dessa trava levou mais tempo do que o esperado.

Portanto:

  • se o post da API for criado com sucesso, trata-se de um aviso e não da falha raiz;
  • expected max: 1 secs, took an extra 1 secs significa que a trava foi mantida por aproximadamente 2 segundos;
  • é mais provável que esteja relacionado ao desempenho do servidor, latência do Redis/Postgres, E/S de disco, pressão de CPU/RAM, plugins ou processamento lento do post do que ao próprio proxy reverso nginx/1Panel;
  • o motivo de aparecer apenas para postagem via API é que esse caminho do memoizer é utilizado para solicitações da API.

Coisas que valem a pena verificar:

  1. A solicitação da API tem sucesso e cria apenas um post?
  2. Quanto tempo a solicitação da API leva do lado do cliente?
  3. CPU, memória, swap ou E/S de disco estão saturados durante a postagem via API?
  4. O Redis e o Postgres estão dentro do mesmo container/host e estão saudáveis?
  5. O aviso ainda ocorre com um post de texto simples muito pequeno, sem imagens/uploads?
  6. Há plugins não padrão instalados?

Como se trata de uma implantação via 1Panel/container e não da instalação padrão do Discourse via Docker, também pode ser útil reproduzir o problema em uma instalação oficialmente suportada, se possível, antes de tratá-lo como um bug do núcleo do Discourse.