3.5.0.beta8-dev로 업그레이드 후 Cloudflare 521 오류 발생

여러분, 안녕하세요.

Discourse 사이트를 3.5.0.beta8-dev로 업데이트한 후, Cloudflare를 통해 사이트에 접근할 때 갑자기 521 “Web server is down” 오류가 발생하고 있습니다. 이전에 이 가이드에 따라 설정을 완료했고, 그 동안 완벽하게 잘 작동하고 있었기 때문에 예상치 못한 상황입니다.

이후 Cloudflare에서 SSL/TLS 암호화 모드를 **Full (Strict)**에서 Flexible으로 변경해 보니 사이트가 다시 로드되었습니다.

업데이트 이후 왜 이런 일이 발생하는지 아시는 분이 계신가요?
3.5.0.beta8-dev 버전에서 Cloudflare 호환성이나 HTTPS 처리에 영향을 줄 수 있는 새로운 변경 사항이 있을까요?

도움이나 조언을 주시면 감사하겠습니다!

미리 감사합니다!

저는 3.5.0.beta8-dev를 Cloudflare와 함께 Full (strict) SSL로 실행 중이며, 아무런 문제가 없습니다.

확인해 보셔야 할 몇 가지 사항:

  • Let’s Encrypt를 확인하세요 - 업그레이드 로그를 검토하고 모든 것이 올바르게 다시 빌드되었는지 확인하세요.
  • 외부 방화벽 변경 사항이 있는지 확인하세요 (DigitalOcean은 외부 방화벽을 제공합니다)

521 오류와 Flexible으로의 전환은 서버가 HTTPS로 설정되어 있지 않음을 나타냅니다.

제안해 주셔서 감사합니다! @LotusJeff

SSL 설정을 확인해 보았는데, Let’s Encrypt를 사용하지 않고 Cloudflare에서 발급받은 Origin Certificate를 생성하여 키와 인증서를 다음 위치에 배치했습니다:

확인 후 전체 재빌드(rebuild)를 수행했습니다. 하지만 Cloudflare을 Full (Strict)로 설정하면 여전히 521 오류가 발생합니다.

참고로 제 app.yml의 templates 섹션은 다음과 같습니다:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

expose:
  - "80:80"   # http
  - "443:443" # https

시간 내어 도와주셔서 다시 한번 감사합니다!

기억을 떠올려 보면, Cloudflare 인증서는 유효 기간이 90일입니다. 따라서 3개월마다 새로운 인증서를 발급해야 합니다. 현재 인증서가 얼마나 오래되었는지 기억하시나요?

기본 설정은 Let’s Encrypt를 사용하는 것입니다. 시스템이 자동으로 인증서를 갱신해 주므로, 수동으로 관리해야 할 일이 하나 줄어듭니다.

Cloudflare는 현재 최대 15년까지 유효한 인증서를 제공합니다. 제 인증서는 아직 유효 기간 내에 있습니다.

그럼에도 불구하고, 확실하게 확인하기 위해 새로운 인증서를 생성하여 기존 인증서를 교체해 보았지만, 여전히 동일한 문제가 발생했습니다.

Let’s Encrypt를 사용하는 기본 설정으로 되돌아가려면 다음만 하면 충분한가요?

  1. app.yml에서 이 줄의 주석을 해제합니다:
- "templates/web.letsencrypt.ssl.template.yml"
  1. 그리고 Cloudflare의 SSL 모드를 Full로 설정합니다?

Discourse에서 개인 인증서에서 Let’s Encrypt로 전환하는 과정을 직접 해본 적은 없지만…

app.yml 파일에서 다음 두 부분을 주석 해제해야 합니다:

  1. - "templates/web.letsencrypt.ssl.template.yml" 템플릿 라인
  2. Let’s Encrypt 계정 이메일:
## If you added the Let's Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: <이메일 주소를 여기에 입력>

커스텀 SSL 인증서를 위해 템플릿에 다른 수동 변경 사항을 적용했다면, 이를 표준 설정으로 되돌려야 합니다.

앱을 다시 빌드할 때 Let’s Encrypt 구성 요소는 후반부에 위치합니다. 해당 부분을 주의 깊게 확인하고 오류 코드가 발생했는지 살펴보세요.