Litespeed 리버스 프록시 뒤에서 새 설치 시 로딩 화면에서 멈춤

기존 Discourse 설치 환경을 새 서버로 이전하는 작업을 진행 중입니다. 이 작업의 첫 단계는 새 서버에 새로운 Discourse 설치 환경을 구축하는 것입니다. 새 서버에는 이미 80포트와 443포트에서 웹 서버가 실행되고 있으므로, 여기에 설명된 대로 리버스 프록시 뒤에서 Unix 소켓을 통해 Discourse를 실행하고 있습니다.

다만 다른 점은 nginx 대신 OpenLiteSpeed를 리버스 프록시로 사용한다는 것입니다. 그러나 OpenLiteSpeed 설정은 비교적 간단하며, 다른 Docker 앱에서는 이미 정상적으로 작동하게 만들었습니다. 소켓 주소를 사용하여 외부 애플리케이션을 구성한 후, Proxy 컨텍스트를 사용해 모든 요청이 해당 소켓으로 전달되도록 재작성하면 됩니다.

그 결과, 프록시된 URL(이 경우 forum.prostasia.org)에 접속하면 Discourse가 로드는 되지만, 애니메이션 점 표시가 있는 로딩 화면만 표시되고 그 상태에서 멈춰 버립니다.

이 문제를 해결하기 위한 트러블슈팅 방법을 조언해 주실 수 있을까요? 감사합니다!

JavaScript 콘솔을 열어 로드되는 내용을 확인할 수 있습니다. 콘솔과 네트워크 탭을 확인해 보세요.

Let’s Encrypt 템플릿을 제거했나요?

감사합니다. 도움이 되었습니다. 이런 오류가 많이 발생하고 있습니다:

Refused to load the script x because it violates the following Content Security Policy directive:

같은 리버스 프록시 앞에 다른 Docker 컨테이너를 배치했을 때, 환경 변수 TRUSTED_PROXIES를 **로 설정하면 해결할 수 있었습니다.

Discourse에서도 같은 방법을 시도해 볼 가치가 있지만, 어떻게 설정해야 할까요?

콘텐츠 보안 정책(CSP) 설정을 정말 엉망으로 만든 것 같습니다.

또한 로고를 http://www.example.com/에서 가져오려고 하므로, 여기서 문제의 원인을 파악할 수 있을 것입니다. 아마도 폼이 자신의 호스트 이름으로 여기는 것이 바로 그것인 것 같습니다…

image

감사합니다. 솔직히 example.com이 어디서 왔는지는 저도 모르겠습니다. 설치 스크립트 discourse-setup이 이 사용 사례에는 작동하지 않아서, 제가 한 일은 containers/app.yml 파일을 수정한 뒤 launcher rebuild app 명령을 실행한 것뿐입니다. 어딘가의 example.com 값을 덮어쓰지 못한 것 같습니다.

하지만 어쨌든 제 설정 문제를 해결했습니다. 새 설치를 초기화한 뒤 백업을 복원하는 대신, 원래 서버의 /var/discourse 디렉터리 전체를 타르볼(tarball)로 만들어 그 위에 다시 빌드(rebuild)를 진행했고, 자아… 모든 것이 정상적으로 작동하는 것 같습니다. 그래서 앞으로 백업을 복원할 때 이 방법을 사용하겠습니다. :slight_smile:

discourse-setup을 작동시킬 수 있으며, 다음 방법을 사용할 수 있습니다:

  • 80/443 포트에서 실행 중인 서비스를 일시적으로 끄기
  • 다른 서버에서 빌드한 후 복사하여 가져오기
  • 연결성 검사를 우회하는 스위치를 사용하기