Mailjet으로 인증을 시도하는데, txt 파일 또는 DNS 레코드가 필요합니다

네, 그래서 저는 SMTP에 Mailjet을 사용 중인데, 인증 과정에서 문제가 발생하고 있습니다. 먼저, 개별 이메일 주소인 noreply@discourse.example.com을 쉽게 인증할 수 없습니다.

대신 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 루트 디렉토리에 이렇게 텍스트 파일을 넣을 수 있습니다"라고 말해 주는 것일 텐데… :frowning:

도메인 등록 기관이나 DNS 관리자를 알고 계신가요?

등록 기관에서 제공하는 DNS 관리자에서 DNS 항목을 생성해야 하며, Cloudflare과 같은 서비스를 사용하는 경우 해당 서비스에서 DNS 레코드를 생성해야 합니다.

최근에 같은 문제를 겪었습니다. 이렇게 해결했습니다:

자, 마침내 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를 재시작하세요.

짜잔…

(해결책으로 표시했기 때문에 가독성 등을 위해 이 답변을 나중에 수정했습니다)

공개적으로 접근 가능한 Docker 파일을 생성하는 것에 비하면 TXT 레코드를 만드는 것은 매우 쉬운 일입니다.