HTTP로 Discourse를 빌드할 때 오류가 발생합니다

  1. 도메인 구성 완료
  2. AWS EC2 인스턴스 생성
  3. ACM을 사용하여 인증서 발급
  4. 443 포트 구성 및 ALB를 통해 인증서 연결
  5. ALB가 도메인 트래픽을 EC2 인스턴스의 80 포트에 라우팅

Discourse를 빌드하기 전에 app.yml 파일을 수정하여 HTTP 연결을 구성했습니다:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## IPv6 리스너를 활성화하려면 다음 줄의 주석을 해제하세요
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Lets Encrypt(https)를 추가하려면 이 두 줄의 주석을 해제하세요
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## 이 컨테이너가 노출해야 하는 TCP/IP 포트는 무엇입니까?
## Apache 또는 nginx와 같은 다른 웹서버와 포트를 공유하려면
## 자세한 내용은 https://meta.discourse.org/t/17247 를 참조하세요
expose:
  - "80:80"   # http
 #- "443:443" # https

변경 사항을 적용한 후 Discourse를 빌드하고 구성을 확인했지만, nginx가 다음과 같은 오류와 함께 SSL 키를 계속 요청하고 있습니다:

[emerg] 7416#7416: cannot load certificate "/shared/ssl/discourse.xxxxxxx.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)

nginx가 키를 로드하는 시도를 방지하거나, nginx가 HTTP로 정상적으로 작동하도록 하는 방법이 있을까요?

에러는 Nginx가 여전히 SSL 인증서를 찾고 있지만, 실제로 SSL은 ALB에서 처리되고 있기 때문에 발생합니다. 다음과 같이 수정할 수 있습니다:

  1. app.yml 확인: SSL 템플릿을 이미 비활성화한 것으로 보이므로, 이 단계는 건너뛸 수 있습니다.

  2. Discourse 재빌드: ./launcher rebuild app 명령을 실행하여 변경 사항을 적용합니다.

  3. Nginx 설정 확인: 컨테이너 내에서 Nginx 설정을 확인하고 SSL 관련 라인(ssl_certificate, ssl_certificate_key)이 없는지 확인합니다. 발견되면 해당 라인을 제거하고 sv restart nginx 명령으로 Nginx를 재시작합니다.

  4. ALB 설정 확인: ALB가 443 포트에서 SSL을 종료(terminating)하고, HTTP(80 포트)를 EC2 인스턴스로 전달하도록 설정되어 있는지 확인합니다.

이렇게 하면 Nginx가 SSL 인증서를 찾는 일이 사라지고, HTTP로 모든 것이 정상적으로 작동할 것입니다!

감사합니다. 관련 내용과 다른 피드백을 바탕으로 문제를 해결했습니다.