Я смог правильно настроить R2, используя этот набор правил:
## Этот набор строк позволяет загружать и скачивать файлы, размещенные в R2 S3..
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: auto
DISCOURSE_S3_ACCESS_KEY_ID: access-key-id
DISCOURSE_S3_SECRET_ACCESS_KEY: access-key
DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com
DISCOURSE_S3_BUCKET: exotics-unlimited
DISCOURSE_S3_BACKUP_BUCKET: exotics-unlimited-backups
DISCOURSE_BACKUP_LOCATION: s3
# DISCOURSE_CDN_URL: https://eufiles.technospider.com
DISCOURSE_S3_ENDPOINT: https://71*****5d4976.r2.cloudflarestorage.com
# DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
DISCOURSE_S3_INSTALL_CORS_RULE: false
Как только я закомментировал строку с CDN_URL, всё заработало. Думаю, из-за того, что R2 автоматически создаёт CDN, эта строка не нужна, и её добавление, наоборот, ломает работу.
Я закомментировал строку с включением изображений, чтобы уменьшить размер резервных копий. Я использую бесплатный тариф R2 и не хочу превышать свой лимит.