외부에서 추가된 리버스 프록시 때문에 SSL LetsEncrypt 재연장이 작동하지 않음

오늘 내 Discourse 인스턴스의 인증서가 만료되어 브라우저에서 오류가 발생하고 있습니다. 아래 링크에 따라 수동으로 갱신을 시도해 보았습니다:

인증서가 갱신되었다는 메시지가 표시되었고, /shared/letsencrypt 폴더에서 확인해 보니 정상적으로 갱신되어 있었습니다. Docker 내부에서 nginx를 재시작했고, 인스턴스를 재빌드했지만 여전히 이전 인증서가 전송되는 것 같습니다.

여러 사이트에서 도메인을 확인해 보았는데, 모두 인증서가 만료되었다고 합니다. 따라서 로컬 문제만은 아닌 것 같습니다.

무엇을 놓치고 있는 걸까요?

15일 전에 동일한 작업을 수행했습니다.

cd /var/discourse
./launcher enter app
"/shared/letsencrypt"/acme.sh --cron --home "/shared/letsencrypt" --force
exit

가장 먼저 알게 된 사실은 Chrome으로 인증서를 확인했을 때 실제로는 유효한데도 유효하지 않다고 표시될 수 있다는 것입니다. 관련 링크: Chrome / Chromium bug: SSL certificates show incorrect (expired) dates

그 후 다음을 시도했습니다.

me@site:/var/discourse$ sudo ./launcher rebuild app

하지만 이는 작동하지 않았고, 결국

sudo reboot

을 실행한 후 사이트가 예상대로 작동하기 시작했습니다.


rebuild 단계에 대해 언급했지만, 이것이 실제로 필요한지는 확실하지 않습니다. 다만, 과정에서 제가 수행했던 단계 중 하나였습니다.

몇 시간 동안 시도한 끝에, 이 글을 올린 직후에야 멀티사이트 배포 환경에서 nginx 리버스 프록시를 사용하고 있기 때문에 외부 nginx 서버도 다시 시작해야 한다는 사실을 깨달았습니다. 그러자 즉시 정상적으로 작동하기 시작했습니다.
혹시 비슷한 상황에 부딪히는 사람이 있을까 봐 이 답변을 정답으로 표시해 두겠습니다.

마지막 sudo reboot가 작동한 이유는 nginx가 재시작되었기 때문일 것입니다. 제가 위에서 제시한 해결책에서도 바로 그 부분을 언급했었죠.

이와 관련하여 몇 가지 참고할 점:

  • 언급된 상황에서는 브라우저가 주소창에 실제로 유효하지 않다고 표시하지 않습니다
  • 운영체제에 따라 인증서 날짜를 확인하더라도 날짜 관련 경고가 표시되지 않을 수 있습니다

인증서가 자동으로 갱신되지 않은 근본 원인을 찾았나요?

해당 사이트에서 확인한 결과, 프로덕션 모드가 아니기 때문에 모든 이메일이 일시 중지된 상태였고, 인증서 갱신에 사용되는 이메일도 포함되었습니다.

image

이메일이 일시 중지된 이유는 데이터베이스 복구 과정의 일부이기 때문이며, 구체적인 경우를 보면 다른 인스턴스의 Discourse에서 복구된 것이었습니다.

두 사이트가 동일한 이메일을 보내지 않도록 하기 위해 이메일 기능이 비활성화되어 있습니다.

이메일이 이 과정에 아무런 형태로든 관여되는 유일한 경우는, 증서가 만료되도록 임박했는데도 갱신을 하지 않은 경우 Let’s Encrypt(LE)가 경고 메일을 보낼 수 있다는 점입니다.

알겠습니다. 감사합니다. 이제 인증서가 자동으로 갱신되지 않은 원인을 찾아야 합니다.

인증서가 갱신되지 않을 수 있는 이유가 있을까요?

보통은 예상치 못한 커스터마이징으로 인해 프로세스가 깨지는 경우가 많습니다. 상세 정보와 진행한 내용을 담아 새 토픽을 개설해 보시기 바랍니다.