Muitos assets retornando 500 aleatoriamente

Minha primeira suposição era que se tratava de um problema de otimização da Cloudflare — certifique-se de que o Rocket Launcher esteja desativado (provavelmente já está, mas vale a pena verificar).

Além disso, acho que você pode querer configurar o armazenamento de objetos do bucket S3 usando o Cloudflare R2 se quiser continuar usando o hardware que está utilizando.

Você mencionou em nossa conversa que está usando alguns SSDs antigos doados que instalou pouco antes desse problema começar, o que é uma pista clara: o firmware da Dell indica que eles estão com defeito, mas o smartctl mostra como OK. Acredito que o firmware da Dell esteja piscando em laranja porque detecta latência alta e respostas de E/S erráticas ou firmware não suportado. O Discourse solicita que as unidades leiam dezenas de arquivos JavaScript compilados todos ao mesmo tempo, e SSDs antigos e não suportados podem ter dificuldades para lidar com essa repentina carga de E/S. O controlador de armazenamento trava ao tentar obter os dados, expirando após exatamente 30 segundos — um tempo limite padrão comum para dispositivos SCSI/de bloco.

Como as unidades ficam travadas por 30 segundos, o Discourse (Rails/nginx) falha ou expira ao tentar buscar os arquivos e gera um erro 500. A Cloudflare provavelmente está capturando os erros 500 e aplicando os cabeçalhos incorretos, passando-os ao navegador, o que causa o NS_ERROR_CORRUPTED_CONTENT que você está vendo.

Substitua esses SSDs ou, se for necessário usá-los, utilize um bucket de armazenamento de objetos para descarregar os ativos e uploads do Discourse — você pode usar o Cloudflare R2, que é compatível com S3 na camada gratuita (eu tenho isso e funciona bem). Assim, seu servidor não precisará ler milhares de pequenos arquivos desses SSDs defeituosos, pois o gargalo de hardware para ativos da web será contornado.