Consegui fazer o R2 funcionar corretamente usando este conjunto de regras:
## Este conjunto de linhas permite que arquivos hospedados no R2 S3 sejam enviados e baixados..
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
Assim que comentei a linha CDN_URL, as coisas funcionaram. Acho que pela natureza do fato de o R2 criar o CDN automaticamente, você não precisa dessa linha e, na verdade, adicioná-la quebra as coisas.
Eu comentei a linha de inclusão de imagens apenas para manter meus tamanhos de backup baixos. Estou usando o nível gratuito no R2 e não quero exceder meu limite.