S3(Cloudflare R2)에 업로드할 수 없음

여기 있는 가이드들을 따라 사이트에서 R2를 설정하고 있었는데, 파일을 업로드하려고 하면 죄송합니다. 업로드에 실패했습니다. 다시 시도해 주세요.라는 일반적인 오류 메시지만 표시됩니다. 로그에서 확인할 수 있는 것은 다음과 같습니다:

웹 UI가 how-to 게시물에 나와 있는 구조로 입력한 URL을 형식 오류라고 거부해서, URL을 app.yml 파일에 설정해 두었습니다:

image
CDN_URL은 Cloudflare에서 설정한 커스텀 도메인이고, S3_ENDPOINT은 웹 패널에 표시된 URL입니다. 인증 토큰도 올바르게 생성하여 모든 옵션이 적절히 설정되어 있습니다:

Cloudflare에서는 일부 요청을 확인하는 것 같지만, 실제로 저장되는 내용은 없습니다.

문제가 무엇일까요?

안녕하세요,

S3 CDN URL과 S3 엔드포인트의 마지막 슬래시(/) 때문이 아닐까요?

이 가이드들을 따랐나요? 업로드 버킷 이름이 "discourse"인지 확실합니까?

네, 끝의 슬래시를 제거하면 UI 설정에서 해당 URL을 사용할 수 있습니다.

네, 첫 번째 가이드를 따랐습니다.

맞습니다.

슬래시를 제거해 보고 후속 조치를 취하겠습니다.

트레일링 슬래시를 제거했지만 여전히 작동하지 않습니다. 같은 Unauthorized 오류가 발생합니다.

토큰도 올바르게 설정되어 있습니다.

Cloudflare R2 토큰에 읽기/쓰기 권한이 있는지, 그리고 CORS 정책을 올바르게 설정했는지 확인해 보셨나요? 서버 구성이 다소 특이한 경우 Cloudflare 버킷의 권한과 설정이 정확해야 하며, 그렇지 않으면 권한 오류가 발생할 수 있습니다.

잘못된 유형의 토큰을 생성했습니다. 일반 API 토큰을 사용 중인데, R2 버킷 토큰을 생성해야 합니다:

  1. Cloudflare 대시보드에서 R2 객체 저장소로 이동하세요 (왼쪽 사이드바의 storage & databases 항목 아래에 있습니다).
  2. R2 개요 페이지 오른쪽에서 manage(API 토큰)를 클릭하세요.
  3. create account API token을 클릭하세요.
  4. 적절한 토큰 이름을 입력하고 권한을 object read & write로 설정한 후 save를 클릭하세요.
  5. access key idsecret access key가 출력됩니다. 이 값들을 Discourse의 S3 설정에 입력해야 합니다.

그리고 네, Discourse가 이를 거부할 가능성이 높으므로 끝에 있는 슬래시(/)는 제거해야 합니다.

감사합니다. 결국 그게 문제였네요. 불필요하게 혼란스럽긴 하지만, 그건 Cloudflare 탓입니다.

네, 클라우드플레어 대시보드는 설정 때문에 진짜 골칫덩어리일 수 있죠 ㅋㅋ. 해결하셨다니 다행이에요!