# 스테이징 환경에 비밀번호를 설정하는 방법?

**URL:** https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641
**Category:** Self-hosting
**Created:** [8월 21, 2020, 9:25오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641 "2020-08-21T09:25:00Z")
**Posts on this page:** 18
**Page:** 1

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 9:25오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/1 "2020-08-21T09:25:00Z")

</div>

Discourse가 Apache를 사용하지 않으므로, .htaccess(Apache)에서 하듯이 스테이징 환경(예: Discourse 도커가 설치된 Digital Ocean 드롭렛)에 비밀번호 보호를 적용하는 방법은 무엇인가요?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [8월 21, 2020, 9:29오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/2 "2020-08-21T09:29:40Z")

</div>

Apache는 없지만, NGINX가 Discourse 컨테이너 내에서 실행 중입니다. 이 주제가 도움이 될 수 있습니다:

> [@Persistent nginx/discourse.conf?](https://meta.discourse.org/t/persistent-nginx-discourse-conf/85363/5?u=david):
>
> If anyone else is looking to add auth\_basic to their site during development, and make it persistent across ./launcher rebuild app just update your containers/app.yml with: ## Any custom commands to run after building run: - exec: echo "Beginning of custom commands" - replace: filename: "/etc/nginx/conf.d/discourse.conf" from: "# auth\_basic on" to: "auth\_basic on" - replace: filename: "/etc/nginx/conf.d/discourse.conf" from: "# auth\_basic\_user\_file /etc/nginx/htpa…

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 9:40오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/3 "2020-08-21T09:40:50Z")

</div>

완벽해요, 감사합니다 @david 😇

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 10:02오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/4 "2020-08-21T10:02:40Z")

</div>

방금 추가했는데, 이제 [https://cdn-uploads.example.com](https://cdn-uploads.example.com) 와 [https://cdn-origin.example.com](https://cdn-origin.example.com) 의 모든 이미지마다 인증 비밀번호를 입력해야 합니다. [https://discourse.example.com](https://discourse.example.com) 만 보호하는 방법이 있을까요?

그렇지 않으면 지금은 다음과 같은 문제가 발생합니다:

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/0/2094b0805a21a7ebf428dba19a25772ab3b06d6c.png)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [8월 21, 2020, 10:24오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/5 "2020-08-21T10:24:02Z")

</div>

정확히 어떻게 해야 하는지 확실하지 않지만, 혹시 아이디어가 있는 분이 있다면 참여해 주실 수 있을 것 같습니다. nginx 설정을 조금만 조정하면 가능할 것 같습니다.

일시적인 해결책으로, 그리고 이것이 스테이징 서버이므로 CDN을 비활성화해 주실 수 있을까요? 에셋에 동일한 도메인을 사용하시면 인증 헤더가 자동으로 전송되므로 인증 비밀번호를 다시 입력할 필요가 없습니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 10:35오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/6 "2020-08-21T10:35:08Z")

</div>

네, S3 버킷을 백업과 업로드에 사용하고, 프로덕션 환경에서 업로드용 CDN으로 CloudFront를 사용하는 경우, 스테이징 환경에 대해 권장되는 접근 방식이라면 그렇게 하시면 됩니다.

스테이징 환경에 모든 것이 꼭 필요한 건 아니죠?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [8월 21, 2020, 10:44오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/7 "2020-08-21T10:44:09Z")

</div>

> [@Terrapop](#):
>
> S3 버킷을 백업 및 업로드용으로 사용하고, 업로드용 CDN으로 CloudFront를 사용하는 경우

이 nginx 변경 사항은 분명히 S3 업로드나 S3 CDN에 영향을 미치지 않아야 합니다. NGINX는 해당 부분에 전혀 관여하지 않으므로요. 로컬 업로드에 CDN을 사용하고 있다고 가정했었습니다.

> [@Terrapop](#):
>
> 스테이징 환경에 대한 권장 접근 방식이 그렇다면

이상적인 상황은 스테이징 사이트를 프로덕션 사이트와 동일한 구성으로 설정하는 것입니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 11:00오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/8 "2020-08-21T11:00:12Z")

</div>

```plaintext
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: XXXXXXXXXXXXXXXXXXXXXX
  DISCOURSE_S3_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  DISCOURSE_S3_CDN_URL: https://cdn-uploads.example.com
  DISCOURSE_S3_BUCKET: example-uploads
  DISCOURSE_S3_BACKUP_BUCKET: example-backup
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_CDN_URL: https://cdn-origin.example.com

```

현재 스테이징의 메인 도메인은 [https://staging.example.com](https://staging.example.com) 입니다.

그럼에도 불구하고 제안된 코드를 적용한 상태에서 [https://staging.example.com에](https://staging.example.xn--com-568n) 접근하면 cnd-origin으로发出的 모든 요청마다 인증이 요구됩니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 12:40오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/9 "2020-08-21T12:40:11Z")

</div>

같은 문제를 겪고 있는 분들을 위한 업데이트:

> **[All distribution settings reference - Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesWhitelistHeaders)**
>
> The values that you specify when creating or updating a CloudFront distribution, such as origin and cache behavior settings.

cdn-origin에 대해 CloudFront에서 Authorization 헤더를 화이트리스트에 추가해야 했습니다.

cdn-uploads의 경우 인증을 요청받지 못한 것 같습니다.

이제 정상적으로 작동합니다.

---

<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월 21, 2020, 1:04오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/10 "2020-08-21T13:04:59Z")

</div>

스테이징 사이트에서 로그인 필수 설정을 활성화합니다. app.yml에서 환경 변수를 사용해 설정하면 영구적으로 유지됩니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 1:21오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/11 "2020-08-21T13:21:16Z")

</div>

구글이나 다른 검색 엔진이 사이트를 찾지 못한다면 아무리 좋아도 소용없어요. 어쨌든 지금은 잘 작동하고 있습니다.

---

<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월 21, 2020, 1:22오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/12 "2020-08-21T13:22:32Z")

</div>

사이트는 보이지만 콘텐츠는 볼 수 없겠죠?

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 21, 2020, 1:26오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/13 "2020-08-21T13:26:27Z")

</div>

우리의 경우, 사이트가 익명 사용자에게 어떻게 반응하는지 확인할 수 있어야 합니다. 그래서 괜찮습니다. 이제 basic\_auth로 작동합니다.

---

<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월 21, 2020, 2:12오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/14 "2020-08-21T14:12:59Z")

</div>

음, 덕분에 이 일을 하는 방식을 다시 생각해볼 것 같아요!

---

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [8월 21, 2020, 2:30오후 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/15 "2020-08-21T14:30:06Z")

</div>

> [@Terrapop](#):
>
> Discourse가 Apache를 사용하지 않으므로, .htaccess(Apache)에서 하듯이 예를 들어 스테이징 환경(Digital Ocean droplet에 Discourse docker)을 비밀번호로 보호하는 방법은 무엇인가요?

@Terrapop 안녕하세요

여기 아이디어 하나를 공유해 드리겠습니다. 저희도 이렇게 하고 있습니다.

스테이징 환경을 Apache2(또는 nginx) 리버스 프록시 뒤에 실행하면, 익숙하신 `.htaccess`처럼 리버스 프록시에서 접근 규칙을 설정할 수 있습니다.

Discourse를 리버스 프록시 뒤에 실행하는 것에는 수많은 장점이 있으며, 접근 제어의 용이함은 그 중 하나의 이점입니다.

도움이 되셨길 바랍니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [8월 22, 2020, 6:03오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/16 "2020-08-22T06:03:09Z")

</div>

nginx에 대해 초보자도 쉽게 따라 할 수 있는 튜토리얼이 있을까요? Digitalocean의 Droplet과 Docker를 통해 호스팅하고 있습니다.

---

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [8월 22, 2020, 6:58오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/17 "2020-08-22T06:58:35Z")

</div>

안녕하세요 @Terrapop

리버스 프록시 뒤에 “두 개의 컨테이너” 구성으로 Discourse를 설정하는 방법에 대한 훌륭한 튜토리얼이 메타에 많이 있습니다.

메타에서 다음을 검색해 보세요:

```plaintext
two container reverse proxy

```

 ![Screen Shot 2020-08-22 at 1.57.38 PM](https://global.discourse-cdn.com/meta/original/3X/0/5/05cece21c3add9beedbb0b72c417ca9f24b43bf6.jpeg)

도움이 되기를 바랍니다.

참고로, 단순히 스테이징(테스트)을 위해 "두 개의 컨테이너"를 설정하지 않는 경우가 많습니다. 보통 프로덕션 환경에서만 이렇게 합니다. 하지만 프로덕션 환경과 “완전히 동일한” 스테이징 환경을 구축하려면 “두 개의 컨테이너” 구성이 매우 좋은 방법입니다. 다만, 리버스 프록시 뒤에 웹 앱을 실행하기 위해 반드시 "두 개의 컨테이너"가 필요한 것은 아닙니다. 저는 프로덕션과 개발 환경 모두에서 리버스 프록시 뒤에 ROR 및 Docker 웹 앱을 정기적으로 실행하고 있습니다.

---

<div class="post-metadata">

### Author: ![trying2survive](https://avatars.discourse-cdn.com/v4/letter/t/f0a364/32.png) [@trying2survive](https://meta.discourse.org/u/trying2survive)
#### Post date: [3월 29, 2021, 8:20오전 UTC](https://meta.discourse.org/t/how-to-password-protect-staging-environment/161641/18 "2021-03-29T08:20:10Z")

</div>

안녕하세요. CloudFront에서 인가(authorization) 헤더를 올바르게 화이트리스트에 추가하는 방법을 알고 싶습니다. 위에 언급된 대로 app.yml에 "auth\_basic"을 추가했습니다. 데스크톱으로 브라우저에서 열면 비밀번호 보호가 정상적으로 작동하지만, 모바일로 열 때(사용자와 비밀번호를 입력한 후) 다음과 같은 오류가 발생합니다:

 ![IMG_4021](https://global.discourse-cdn.com/meta/original/3X/3/b/3b831d275e80a14c69b58198b5e7483867aa2a19.jpeg)  
  
  
저의 “cdn-origin” 설정은 다음과 같습니다:

 ![Screen Shot 2021-03-29 at 4.06.10 PM](https://global.discourse-cdn.com/meta/original/3X/e/3/e3d308d97a07e0adea209aa1de654d69ee5e490f.png)  
  

“whitelist-authorization-headers” 정책:

 ![Screen Shot 2021-03-29 at 4.14.52 PM](https://global.discourse-cdn.com/meta/original/3X/5/a/5a77a9325316bdcf6dcf9a696c5cc3475c43db71.png)

CloudFront을 아직 잘 모르는 편이라, 모바일 설정 관련해서 아주 자명한 것을 놓치고 있는 것 같습니다.
