상황에 대해 업데이트를 드리려고 합니다.
일부 연구를 거친 후, 저는 멀티사이트 설정(현재는 컨테이너 1개)을 사용해야겠다고 결정했습니다. 외부 nginx 사이트를 통해 설정을 설명하고, 트래픽을 개별 discourse 사이트로 유도하기 위해서입니다. 이렇게 하면 list1 사용자들이 list2의 콘텐츠를 다룰 필요 없이, 두 사이트 모두 읽기 전용 액세스(및 웹 크롤러)에 열려 있도록 할 수 있습니다. 웹 크롤러를 만족시키기 위해 robots.txt를 조정해야 할 수도 있습니다.
멀티사이트 설정 예제는 도움이 되었지만, unix 소켓으로 작동시키지 못했습니다(게이트웨이 오류). 결국 포워딩을 다른 포트에 설정하고, 컨테이너 내부에서 해당 포트를 443으로 리다이렉트하는 방식으로 해결했습니다.
app.yml 파일에서는 SSL 템플릿은 활성화했지만 letsencrypt 템플릿은 활성화하지 않았습니다.
테스트베드 사이트는 작동하게 만들었고, 이제 프로덕션 사이트를 전환할 때 발생할 수 있는 문제를 찾고 있습니다. hopefully 이번 달 말이나 다음 달에 전환할 예정입니다.
인증서 문제는 외부 서버 쪽에서 처리하고 있지만, 컨테이너 내에서 https를 요구하도록 설정하여 수정한 ‘보안되지 않음’ 문제에 부딪혔습니다. 최신 인증서와 키를 컨테이너의 /shared/ssl 디렉토리에(ssl.crt와 ssl.key로) 복사하는 작업을 cron을 통해 실행하는 태스크를 설정했습니다. 인증서가 변경될 때(7월인 것 같습니다) 새 인증서가 로드되도록 컨테이너 내부의 nginx를 재로드하도록 강제해야 하는지 확실하지 않습니다.
discourse 관련 함정 하나를 발견했습니다:
컨테이너의 /etc/nginx/conf.d/discourse.conf 파일에는 다음과 같은 코드 조각이 있습니다(도메인 이름은 변경됨):
if ($http_host != ‘site1.my.domain’) {
rewrite (.*) https://site1.my.domain$1 permanent
}
이것 때문에 site2.my.domain이 site1.my.domain으로 리다이렉트되고 있었으므로, 주석 처리해야 했습니다.
참고: 컨테이너를 재빌드하면 이 편집을 다시 해야 합니다. 이를 피하는 방법이 있을까요?
이로 인해 브라우저 관련 함정에 부딪혔는데, 이제 firefox가 해당 리다이렉트를 영구적인 것으로 표시하고 있었기 때문에 브라우저 캐시를 삭제해야 했습니다. (이걸 파악하는 데 너무 오랜 시간이 걸렸습니다!)
또 다른 이상한 점 하나를 발견했습니다.
테스트베드 사이트에서는 https를 요구하는 매개변수가 두 사이트 모두 체크되어 있지 않았습니다. 프로덕션 사이트에서는 해당 매개변수가 설정 파일에 아예 존재하지 않습니다. 이는 두 사이트 간의 차이와 관련이 있을 것으로 추측합니다.