# Full site CDN acceleration for Discourse

**URL:** https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467
**Category:** Self-Hosting
**Tags:** cdn, explanation
**Created:** [10월 24, 2014, 6:17오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467 "2014-10-24T06:17:57Z")
**Posts on this page:** 20
**Page:** 2

<div class="post-metadata">

### Author: ![Ed\_Bobkov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_bobkov/32/200014_2.png) [@Ed\_Bobkov](https://meta.discourse.org/u/Ed_Bobkov)
#### Post date: [4월 4, 2021, 9:35오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/21 "2021-04-04T09:35:13Z")

</div>

CDN 기술에 대해 질문이 있습니다.

CDN은 내 사이트의 파일만 캐시할 수 있고, 다른 사이트에서 핫링크된 파일은 캐시할 수 없다는 것이 맞나요?

저는 카탈로그 파일(mps와 이미지)을 다른 서버에 저장해 두고, 제 Discourse 사이트에서 핫링크로 사용하고 있습니다. 이러한 파일들은 CDN에 의해 캐시되지 않는다는 것이 맞나요? 핫링크된 파일도 캐시할 수 있는 방법이 있을까요?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [4월 4, 2021, 12:50오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/22 "2021-04-04T12:50:56Z")

</div>

Discourse가 원격 이미지를 자체 이미지 스토어로 가져오지 않도록 설정하지 않는 한, 기본적으로 그렇게 처리합니다. 아래 내용은 이 기능을 비활성화했다고 가정하고 설명합니다.

해당 사이트를 CDN 뒤에 배치한 후, CDN URL을 Discourse에 공유해야 합니다.

이미지 사이트에 CDN을 앞에 배치했지만 Discourse에 원본(origin) URL을 공유하는 경우, 내장된 기능을 사용하여 원본 URL을 CDN URL로 교체할 수 있습니다.

---

<div class="post-metadata">

### Author: ![Ed\_Bobkov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_bobkov/32/200014_2.png) [@Ed\_Bobkov](https://meta.discourse.org/u/Ed_Bobkov)
#### Post date: [4월 4, 2021, 1:10오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/23 "2021-04-04T13:10:52Z")

</div>

Discourse에서 CDN 기능을 활성화하고 원본을 Discourse에 저장하는 기능을 끄면, CDN 서비스가 이러한 외부 파일을 캐시하고 Discourse가 다른 사이트에서 핫링크된 파일에 대한 모든 링크를 대체하게 되는 것이 맞나요?

다른 사이트에서 핫링크된 외부 파일을 캐시할 수 있을지 의문입니다. 확인해 주실 수 있는 분 계신가요?

---

<div class="post-metadata">

### Author: ![jaffadog](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jaffadog/32/236329_2.png) [@jaffadog](https://meta.discourse.org/u/jaffadog)
#### Post date: [11월 3, 2021, 8:34오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/24 "2021-11-03T20:34:15Z")

</div>

참고로, AWS CloudFront를 사용하여 전체 사이트 CDN 가속(및 SSL 종료)을 설정하는 방법에 대한 새 스레드를 여기에 게시했습니다(아래 링크). 이 부분은 주의가 필요합니다 — 신중하게 접근하세요.

> [@AWS CloudFront를 사용한 전체 사이트 CDN](https://meta.discourse.org/t/full-site-cdn-using-aws-cloudfront/208161):
>
> 안녕하세요. 최근 AWS CloudFront(CF)을 사용하여 전체 사이트 가속을 설정하고, CF에 있는 AWS 인증서를 이용해 SSL 오프로딩을 적용하여 Discourse 설치를 완료했습니다. 이 설치 방법은 공식 가이드의 CDN 및 SSL 구성과 다르기 때문에 논란이 될 수 있으며, 향후 지원 가능성에 문제가 될 수도 있습니다. 따라서 미리 경고드립니다… 여기에는 함정이 있습니다. 제가 성공적으로 적용한 구성을 공유합니다: Discourse가 포트 80에서만 경청하도록 설정하고, app.yml의 지정된 줄을 주석 처리하여 Let’s Encrypt를 비활성화합니다: Discourse가 x-forwarded-proto(CF는 이를 전달하지 않으며, 기원으로 전달하도록 구성할 수도 없어 정말 답답합니다! angry) 대신 CF 헤더인 cloudfront-forwarded-proto를 인식하도록 설정합니다.

---

<div class="post-metadata">

### Author: ![AquaL1te](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aqual1te/32/201966_2.png) [@AquaL1te](https://meta.discourse.org/u/AquaL1te)
#### Post date: [7월 30, 2022, 5:11오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/25 "2022-07-30T17:11:11Z")

</div>

> [@ryanerwin](#):
>
> 컨테이너 정의에 `DISCORSE_ENABLE_CORS: true`를 추가하는 것을 잊지 마세요.

`Reason: CORS header ‘Access-Control-Allow-Origin’ missing` 오류가 발생했을 때에도 여전히 이것이 필요한가요?

Github에서 해당 변수를 사용하는 것을 찾을 수 없습니다:

> **[GitHub - discourse/discourse\_docker: A Docker image for Discourse](https://github.com/discourse/discourse_docker)**
>
> A Docker image for Discourse

* * *

수정: 설정 주석에는 여전히 필요하다고 되어 있고, 실제로 그렇게 설정한 후에는 작동합니다. 그냥 받아들여야겠네요 🙂

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [8월 6, 2023, 2:49오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/26 "2023-08-06T14:49:41Z")

</div>

현재 2023년 기준으로, 아래 네 가지 규칙을 여전히 엄격히 준수해야 하나요? 예를 들어, Akamai와 같은 CDN을 사용하여 메인 도메인 이름을 가속하도록 설계된 경우를 생각해 봅시다. 아래 규칙들의 정제된 구성 예가 있을까요? 예를 들어 \*\*메시지 버스(message bus)\*\*와 \*\*롱 폴링(long polling)\*\*은 여전히 오리진 서버로 요청을 보내야 하는가요? 이러한 설정은 어디에 적용해야 하나요? 롱 폴링 기본 URL(long polling base url)이 관리자 대시보드에서 제거된 것 같습니다.

> [@sam](#):
>
> 1. “메시지 버스”는 **반드시** 오리진 서버에서 제공되어야 합니다.
> 2. X-Forwarded-For 신뢰 설정을 구성해야 합니다. Cloudflare의 경우 `cloudflare.template.yml`을 `app.yml` 파일에 추가하세요.
> 3. 사이트에 최적화를 적용하는 기술에는 특히 주의해야 합니다. Rocket Loader와 같은 기능은 Discourse가 작동하지 않도록 만들 수 있습니다. Discourse는 이미 충분히 최적화되어 있으므로 이러한 기능은 필요하지 않습니다.
> 
> “[롱 폴링](http://en.wikipedia.org/wiki/Comet_%28programming%29)” 요청을 다른 도메인에서 제공하려면 사이트 설정의 **롱 폴링 기본 URL** 을 오리진 서버로 설정하세요.
> 
> 예를 들어, 사이트가 “[http://forum.example.com](http://forum.example.com)”에 있는 경우, 사이트 설정에 연결할 \*\*`http://forum-direct.example.com/`\*\*을 설정해야 합니다. 그렇지 않으면 사이트가 손상됩니다.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [8월 6, 2023, 11:01오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/27 "2023-08-06T23:01:21Z")

</div>

메시지 버스 요청을 다른 도메인에서 처리할 수 있도록 설정하는 고급 옵션이 몇 가지 있습니다. 다만 매우 복잡한 구조입니다.

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [8월 10, 2023, 4:11오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/28 "2023-08-10T04:11:12Z")

</div>

즉, "long polling base url"은 Rails 콘솔을 통해 설정해야 합니다. 관리 대시보드에서 이 설정이 제거되었기 때문입니다. 사이트가 Full site CDN 모드에서 정상적으로 작동하려면 이 설정이 여전히 필요함에도 불구하고, 왜 제거되었는지에 대한 이유가 이전에 어디에 게시되었는지 제가 놓친 것 같습니다.

마찬가지로, DISCOURSE\_ENABLE\_CORS: true도 app.yml 파일에서 설정해야 합니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [8월 10, 2023, 9:43오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/29 "2023-08-10T09:43:13Z")

</div>

> [@Hyan](#):
>
> long polling base URL은 Rails 콘솔을 통해 설정해야 합니다.

app.yml에서 환경 변수(DISCUSS\_LONG\_POLLING\_BASE\_URL)를 사용하여 설정해야 합니다. 이 옵션은 숨겨져 있는데, 이는 이 값을 설정해야 하는 사용자가 매우 적고, 설정을 수행하는 사용자는 해당 작업의 의미를 알고 있을 것으로 전제되기 때문입니다.

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [8월 10, 2023, 2:23오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/30 "2023-08-10T14:23:40Z")

</div>

감사합니다, @pfaffman! 대문자로 작성된 변수들은 모두 app.yml에 넣어야 한다는 것을 알았어야 했습니다.  
그렇다면 message-bus의 어떤 사용 사례가 실제로 효과를 발휘하게 되나요? 예를 들어, 게시물에 대한 답글이 알림을 트리거하는 경우 같은 것들이 있을까요? DISCOURSE\_LONG\_POLLING\_BASE\_URL이 설정되지 않은 상태에서 제 사이트에서 message-bus가 의도한 대로 작동하는지 확인하기 위해 사용 사례 테스트를 해보겠습니다.

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [8월 10, 2023, 4:07오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/31 "2023-08-10T04:07:03Z")

</div>

안녕하세요,  
관리자 대시보드에서 “long polling base url” 설정이 제거되었나요? 아니면 rails 콘솔을 통해 이 설정을 할 수 있나요?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [8월 10, 2023, 7:40오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/32 "2023-08-10T19:40:44Z")

</div>

`long_polling_base_url`은 숨겨진 사이트 설정이지만, `app.yml`에서 환경 변수를 사용하지 않는 경우라면 rails 콘솔에서 설정할 수 있습니다:

> <https://github.com/discourse/discourse/blob/main/config/site_settings.yml#L2052C3-L2055C3>

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [8월 11, 2023, 8:24오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/33 "2023-08-11T08:24:15Z")

</div>

이 목록은 확실히 Discourse에 대한 더 많은 통찰력을 제공합니다.  
저는 웹사이트에 CDN을 설정했고, 엣지 캐시에 도달했지만, 응답 헤더에서 메시지 버스 문제를 경험하지는 않았습니다. 그럼에도 불구하고 여전히 안정적이라고 느끼지 못합니다. 또한 CORS 설정도 하지 않았습니다.

```plaintext
Cache-Control: must-revalidate, private, max-age=0

```

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [9월 4, 2023, 3:28오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/34 "2023-09-04T03:28:40Z")

</div>

> [@sam](#):
>
> 예를 들어, 사이트가 “[http://forum.example.com](http://forum.example.com)”에 있는 경우, 사이트 설정에 연결하기 위해 \*\*`http://forum-direct.example.com/`\*\*를 설정해야 합니다. 그렇지 않으면 사이트가 깨질 수 있습니다.

안녕하세요,  
다른 스레드([Full Site CDN Using AWS CloudFront - #2 by Hyan](https://meta.discourse.org/t/full-site-cdn-using-aws-cloudfront/208161/2?u=hyan))에 제 질문을 게시했습니다. 동일한 구성을 수행하고 **#DISCOURSE\_CDN\_URL: [https://discourse-cdn.example.com](https://discourse-cdn.example.com)**을 그대로 두었습니다. 이 값을 웹사이트와 동일한 URL, 예를 들어 [http://forum.example.com으로](http://forum.example.xn--com-ky7m580d) 설정해도 될까요? 그렇지 않으면 도메인 이름 없이 상대 경로로만 표시되는 자산 URL이 생성됩니다.  
@sam 또는 @pfaffman 님이 힌트를 주시면 감사하겠습니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [9월 4, 2023, 3:00오후 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/35 "2023-09-04T15:00:49Z")

</div>

Cloudflare를 CDN으로 사용하는 것을 추천하지 않습니다. 그렇게 하는 사람들도 있긴 합니다. 아마도 도움을 줄 수 있을지도 모르죠.

수정: 아, 죄송합니다. 여기는 “전체 사이트 CDN…” 관련이군요. 제가 여기서 답변을 드리는 건 적절하지 않을 것 같습니다.

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [9월 5, 2023, 7:05오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/36 "2023-09-05T07:05:14Z")

</div>

아니요, 저는 캐시 동적 콘텐츠를 지원하는 Akamai CDN을 사용하고 있습니다.

이 스레드의 첫 번째 게시글을 보면, 웹사이트 URL과 CDN URL이 동일하더라도 전체 사이트 CDN처럼 동작하려면 DISCOURSE\_CDN\_URL을 설정해야 하는 것 같습니다. 하지만 이 설정이 사이트가 깨지거나, 결국 소프트웨어를 처음부터 다시 설치해야 하는 등 돌이킬 수 없는 결과를 초래하는지 확신이 서지 않습니다. 이 게시물([Full Site CDN Using AWS CloudFront](https://meta.discourse.org/t/full-site-cdn-using-aws-cloudfront/208161))의 작성자는 DISCOURSE\_CDN\_URL을 설정하지 않고 기본값 그대로 두었으며, message-bus/long-polling을 서빙하기 위해 별도의 URL이 필요하지 않았습니다. 저는 이 해결책을 적용했고, 현재까지 웹사이트는 잘 작동하고 있습니다. 이 해결책의 유일한 단점은 DISCOURSE\_CDN\_URL 값이 비어 있어 페이지 소스에 많은 상대적 URL(기본 URL이 없는 상태)이 표시되어, 프로덕션 수준의 웹사이트처럼 보이지 않는다는 점입니다.

---

<div class="post-metadata">

### Author: ![Hyan](https://avatars.discourse-cdn.com/v4/letter/h/5fc32e/32.png) [@Hyan](https://meta.discourse.org/u/Hyan)
#### Post date: [9월 6, 2023, 1:56오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/37 "2023-09-06T01:56:52Z")

</div>

질문을 이어가면서, 이 포스트에서 묻는 것과 유사한 내용을 다룬 다른 게시물을 발견했습니다: [CloudFront not caching static files - #4 by Falco](https://meta.discourse.org/t/cloudfront-not-caching-static-files/109818/4?u=hyan)

@Falco 님의 답변에 감사드립니다. 전체 사이트 CDN 설정에서 `DISCOURSE_CDN_URL`을 `DISCOURSE_HOSTNAME`과 동일하게 설정할 수 있을까요? 전체 사이트 CDN은 호스트명의 URL을 CDN이 가속한다는 의미이므로, `DISCOURSE_CDN_URL`과 `DISCOURSE_HOSTNAME`이 동일해져야 한다고 생각합니다. 하지만 메타 포럼에는 이에 대한 적절한 문서가 없습니다.

---

<div class="post-metadata">

### Author: ![David\_Ghost](https://avatars.discourse-cdn.com/v4/letter/d/c37758/32.png) [@David\_Ghost](https://meta.discourse.org/u/David_Ghost)
#### Post date: [2월 2, 2025, 2:52오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/38 "2025-02-02T02:52:37Z")

</div>

여보세요, 버니에 사용할 수 있는 템플릿이 있나요?

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [2월 2, 2025, 4:03오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/39 "2025-02-02T04:03:37Z")

</div>

이를 위해 템플릿은 필요하지 않습니다. bunny를 설정하여 discourse 사이트에서 데이터를 가져오게 하고, app.yml에서 DISCOURSE\_CDN\_URL을 bunny가 제공한 CDN 엔드포인트로 설정하면 됩니다.

---

<div class="post-metadata">

### Author: ![David\_Ghost](https://avatars.discourse-cdn.com/v4/letter/d/c37758/32.png) [@David\_Ghost](https://meta.discourse.org/u/David_Ghost)
#### Post date: [2월 2, 2025, 4:15오전 UTC](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467/40 "2025-02-02T04:15:29Z")

</div>

Bunny DNS를 사용하면서 VPS IP로 "CDN 가속"을 시도해 보고 있습니다. 작동은 하지만, 모든 사용자에게 동일한 IP가 할당됩니다.

방금 설정을 찾았는데, "X-Real-Ip"라고 되어 있네요.

[이전 페이지](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467.md?page=1)

[다음 페이지](https://meta.discourse.org/t/full-site-cdn-acceleration-for-discourse/21467.md?page=3)
