제 Discourse 사이트는 이미지 비중이 높습니다. 이미지 수가 많기 때문에 이미지를 저장하고 서빙하기 위해 S3/CDN 조합을 사용하고 있습니다. CDN 내부에서는 이미지 하이재킹을 방지하기 위해 다양한 조치를 취하고 있습니다. 그 중 하나는 모든 직접 이미지 접근을 차단하고 정의된 호스트명 목록에서만 접근을 허용하는 것입니다.
이 설정은 아바타를 제외하고는 Discourse에서 정상적으로 작동합니다. 핫링크 보호가 켜지면 아바타가 작동하지 않게 됩니다.
그 이유는 Discourse가 아바타에 프록시 설정을 사용하기 때문입니다. HTML에서 아바타를 위해 프록시 링크를 사용합니다. 링크 구조는 https://discourse.forum/user_avatar/discourse.forums/username/24/616_2.png 형태입니다.
프록시가 해석되면 브라우저가 이미지 파일에 대한 직접 접근을 요청합니다.
제 CDN은 이러한 직접 요청 시 403 오류를 반환하여 직접 접근을 차단합니다. 그 결과 모든 사용자 지정 아바타가 실루엣으로 표시됩니다.
프록시를 제거할 수 있는 옵션은 무엇인가요?
아바타를 표준 이미지 파일 구조로 변경할 수 있을까요?
저도 제가 시간을 들여 도움을 주고 있는데 사람들이 그렇게 반응할 때 싫어하니까, 이건 무승부인 셈이죠 .
네, "프록시"란 요청이 Discourse를 통해 전달된다는 것을 의미합니다. 요청은 브라우저에서 CDN으로 직접 보내지는 것이 아니라 Discourse에서 보내집니다.
CDN을 전체 사이트 CDN으로 설정했나요, 아니면 S3 CDN으로 설정했나요? 후자일 것 같습니다. 그 경우 요청은 Discourse에서 CDN으로 보내지며, 리퍼러(referrer) 없이 전송됩니다. 하지만 요청이 Discourse IP에서 시작되기 때문에 CDN은 여전히 legitimate한 요청임을 인식할 수 있습니다. 그래서 화이트리스트에 추가할 것을 조언한 것입니다.
수정: 보호 기능을 잠시 꺼두고 Bunny의 로그를 확인하여 요청이 어떤 IP에서 오는지 살펴볼 수 있습니다.