멀티사이트 시스템에서 한 사이트에서만 로그인 실패

주 Discourse 사이트 1개와 각기 다른 도메인과 DB를 가진 서브사이트 6개를 추가로 구성해 운영하고 있습니다.

처음에는 일관성을 유지하기 위해 주 사이트의 DB를 복사하여 사용했는데, 나머지 5개 서브사이트에서는 문제없이 잘 작동합니다.

하지만 특정 사이트 1개에서는 로그인 시 다음과 같은 문제가 발생합니다.

  • OIDC를 통해 로그인하면 하얀 화면에 "죄송합니다. 인증이 시간 초과되었거나 브라우저가 변경되었습니다. 다시 시도해 주세요."라는 오류가 표시됩니다.
  • ID/비밀번호로 로그인하면 ID/비밀번호 입력창 위에 "알 수 없는 오류"가 표시됩니다.

작동하는 사이트의 DB를 문제 있는 사이트로 복사해도 해결되지 않았습니다.

혹시 도움이 될지 모르겠지만, 멀티사이트 설정은 다음과 같습니다.

     oneexample:
       adapter: postgresql
       database: oneexample
       username: adminexample
       password: pwexample
       host: 192.168.1.1
       port: 5432
       pool: 25
       timeout: 5000
       db_id: 5
       host_names:
         - 1example.com

'oneexample’과 '1example’을 선택한 이유는 도메인 이름 앞에 숫자가 포함되어 있기 때문입니다. 현재까지의 유일한 의심은 도메인 앞에 있는 숫자가 문제를 일으키는 것인데, 도메인 이름에 숫자가 없는 정상 작동하는 사이트로 DB를 다시 복사하면 정상적으로 작동하기 때문입니다.

다른 도메인을 선택하라고 할 수도 있지만, 이 도메인은 상당히 비싼 유료 도메인이라 정상적으로 작동하게 만들고 싶습니다.

브라우저 쿠키를 삭제하고, DB에서 로그인 로그를 정리했으며, 같은 DB를 다른 도메인과 함께 사용해도 모두 정상적으로 작동했습니다.

아직 테스트하지는 않았지만, 머릿속에 떠오르는 하나의 잠재적 해결책은 도메인을 서브도메인으로 변경하여 도메인 주소 앞의 숫자를 대체하는 것입니다. 예를 들어 다음과 같이요.

하지만 다시 한번 말씀드리지만, 이 프리미엄 도메인에 $$$를 지불한 의미가 없어집니다.

잘못된 부분을 보고 있는 걸까요? 작동할 수 있는 해결책이 있을까요?

host_names: xxx.1example.com으로도 시도해 보았지만, 동일한 오류가 발생합니다.

같은 데이터베이스를 사용하여 숫자가 없는 여러 URL로 성공적으로 테스트해 보았습니다. 도메인 문제와 관련이 있는 것으로 보이지만, 그 외에는 다른 단서가 없습니다.

Nginx의 location 블록에서 다음과 같은 설정을 사용했습니다.

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Proto $scheme;

마지막 줄은 첫 두 줄과 기능이 중복되므로 제거했습니다. 그런데 어떤 이유에서인지 Discourse가 로그인이 https가 아닌 http에서 온 것으로 인식하는 것 같았습니다.

또한 Discourse가 https를 통해 로그인하도록 시도하는지 확인하기 위해 app.yml에 아래 줄을 추가했고, 마침 그렇게 작동하게 되었습니다.

  • DISCOURSE_FORCE_HTTPS: true

따라서 핵심 질문은, 나머지 5개의 서브사이트에서는 어떻게 작동했는가입니다.

이건 네가 맞았어.