Многие ресурсы случайно возвращают ошибку 500

Мои первоначальные предположения указывали на проблему с оптимизацией Cloudflare — убедитесь, что функция Rocket Launcher отключена (вероятно, она и так отключена, но стоит проверить).

Кроме того, я думаю, вам стоит настроить хранение объектов в S3-совместимом хранилище Cloudflare R2, если вы хотите продолжить использование текущего оборудования.

Вы упоминали в нашем чате, что используете некоторые пожертвованные старые SSD-диски, которые установили незадолго до начала возникновения проблемы. Это явный признак неисправности: прошивка Dell сообщает о неисправности дисков, но утилита smartctl показывает их как исправные. Я думаю, прошивка Dell мигает оранжевым индикатором, потому что обнаруживает высокую задержку и нестабильные ответы ввода-вывода или неподдерживаемую версию прошивки. Discourse запрашивает чтение десятков скомпилированных файлов JavaScript одновременно, и старые неподдерживаемые SSD-диски могут не справиться с такой внезапной нагрузкой на ввод-вывод. Контроллер хранения зависает, пытаясь получить данные, и завершает работу с таймаутом ровно через 30 секунд — это стандартное значение таймаута для устройств SCSI/блочных устройств.

Поскольку диски зависают на 30 секунд, Discourse, Rails или Nginx завершают работу или превышают время ожидания при попытке получить файлы и выдают ошибку 500. Cloudflare, вероятно, перехватывает эти ошибки 500, применяет неверные заголовки и передает их браузеру, что вызывает ошибку NS_ERROR_CORRUPTED_CONTENT, которую вы видите.

Замените эти SSD-диски. Если же вы вынуждены их использовать, настройте бакет объектного хранилища для выгрузки ресурсов Discourse и загрузок — вы можете использовать бесплатное S3-совместимое хранилище Cloudflare R2 (у меня такое есть, и оно работает хорошо). Тогда вашему серверу не придется читать тысячи мелких файлов с этих неисправных SSD-дисков, так как он будет обходить аппаратное ограничение для веб-ресурсов.