대신 discourse.example.com 도메인을 인증하는 편이 좋겠는데, 여기에서 두 가지 문제에 부딪힙니다. 특수한 이름의 텍스트 파일을 사용하면 가능해 보이지만, Discourse에서는 이것이 허용되지 않는 것 같습니다(지금 시점에서는 nginx 설정 파일을 수정해 해당 URL에 대해 무언가를 반환하도록 하는 유혹이 꽤 강합니다). 좋습니다, 그렇다면 DNS TXT 파일은 어떨까요? 그런데 여기서 또 문제가 생깁니다. 저는 example.com 도메인의 DNS를 관리하고 있는데, Mailjet은 사실상 mailjet.discourse.example.com이라는 서브도메인에 항목을 입력하라고 요구하고 있습니다. 어떻게 입력해야 할지 명확하지 않습니다. 저는 Ubuntu 16.04에서 Bind 9.3 정도를 사용 중인데, 몇 가지 지침이 있으면 도움이 될 것 같습니다. discourse.example.com에 TXT 항목을 추가하는 방법은 찾을 수 있지만, Mailjet은 그건 안 되고 반드시 mailjet_xxxxx.discourse.example.com, 즉 서브도메인이어야 한다고 합니다. 이건 추가 존(zone)이 필요하다는 뜻인 것 같습니다. 저는 DNS 전문가가 아니지만 복잡한 것을 설치하는 데는 꽤 능숙합니다.
하지만 지금은 온갖 시도를 해보느라 완전히 혼란스러워서… 도움을 구합니다. 즉, 가장 좋은 소식은 누군가가 "물론 Discourse 루트 디렉토리에 이렇게 텍스트 파일을 넣을 수 있습니다"라고 말해 주는 것일 텐데…
자, 마침내 TXT 검증 방법을 성공적으로 작동시켰습니다. Discourse의 "제한 사항"이 있더라도 말이죠. DNS 관련 설정을 만지는 것을 피하고 싶다면 이 방법을 사용하세요. (에에에에에에… 제 경우에는 웹서버 설정을 만지는 것보다 DNS를 건드리는 쪽이 훨씬 더 무섭습니다. 물론 사람마다 다를 수 있겠지만요.)
이 방법을 사용하려면 Discourse 설치 환경에서 nginx 설정 파일을 편집할 수 있어야 합니다. 설정 파일의 위치는 Discourse를 어디에, 그리고 어떤 방식으로 설치했는지에 따라 달라집니다. 제 경우에는 Docker 없이 베어메탈로 설치했는데, /etc/nginx/conf.d/discourse.conf 경로에서 찾을 수 있었습니다 – 역시 여기는 사람마다 다를 수 있습니다.
해당 파일에는 다음과 같은 location 블록이 있을 것입니다:
location / {
....
}
여기에는 내부적으로 중첩된 여러 location 지시문도 포함되어 있을 것입니다.
새로운 location 블록을 하나 생성하세요. 위 블록 안에 중첩되도록 하되(다른 어떤 location 블록 안에는 넣지 마세요!):
location /stupidfilename.txt {
alias /var/www/stupidfilename.txt;
}
여기서 stupidfilename.txt는 상대방이 요청한 특수한 이름의 파일이며, 경로(/var/www)는 Discourse 관련 파일들 바깥에 있으면서도 서버의 일반적인 URL 접근이 가능한 위치여야 합니다. 이 방식이 작동하는 이유는 /가 Discourse의 루트이기 때문에, URL이 Discourse 아래에 있는 것처럼 http:/ /discourse.example.com/stupidfilename.txt 형태로 보이기 때문입니다. (잘못된 링크 생성을 방지하기 위해 공백을 추가했습니다)
즉… 파일을 Discourse 바깥에 배치하고, 해당 파일을 가리키도록 location을 alias로 설정한 후 nginx를 재시작하세요.