안전하지 않은 폰트 요청

Mixed Content: '<URL>'의 페이지가 HTTPS를 통해 로드되었지만, 비보안 폰트 '<URL>'을 요청했습니다. 이 요청은 차단되었습니다. 콘텐츠는 HTTPS를 통해 서빙되어야 합니다.

그리고 discourse-fonts gem에서 폰트를 위한 40개의 요청이 발생했습니다. 이는 Postgres와 Redis가 로컬 네트워크 내의 별도 서버에서 실행되고, 연결은 “소켓” 방식으로 이루어지지만, 외부에는 물론 HTTPS로 서빙되는 신규 설치 환경입니다. 유사한 스레드가 있지만, 제 입장에서는 명확한 답변을 찾지 못했습니다. CSS를 확인해 보니 wizard.scss(소스 매핑됨)를 가리키고 있습니다. 어떤 단서가 있을까요?

force https 설정을 활성화하셨나요?

아마도 아니라고 생각합니다. 어디서 설정하나요? 그리고 CSS가 https로 정적 자산을 요청하거나 상대 경로를 사용하도록 하는 것 대신에 왜 이것이 필요한가요?

참고로 - 외부로 노출된 웹 서버에는 일반적인 301 리다이렉트가 설정되어 있습니다.

수정:

이 게시글을 기반으로 설정을 찾았습니다. @Arkshine 감사합니다.

어떤 곳에 http 링크가 있는 이유가 불분명합니다. https는 무조건 강제되어야 합니다.

검색 창에서 찾을 수 있습니다:

저도 마찬가지입니다. 아무것도 수정하지 않았습니다. 그냥 launcher build app 명령을 실행했을 뿐입니다. 이 URL들은 처리된 CSS에 있는 것 같은데, 저는 CSS도 scss도 전혀 건드리지 않았습니다. app.yml 파일에서도 https와 관련된 내용을 찾을 수 없었기 때문에… 모르겠습니다. force_https 설정이 문제를 우회하는 것 같습니다.

FORCE_HTTPS는 Discourse가 요청을 재작성하도록 지시합니다.

컨테이너 외부에서 SSL 캡슐화를 수행하더라도, 설명하신 문제를 방지하려면 이 설정이 필요합니다.

"필요"를 어떻게 정의하느냐에 따라 다릅니다. 현재로서는 실제 문제를 우회하는 것이 필요할 수 있는데, 그 문제는 컴파일된 CSS 파일이 http 스킴을 사용하여 정적 자산을 명시적으로 참조한다는 것입니다. 하지만 제 생각에는 장기적으로 이는 필요하지 않아야 합니다.

필요하다는 것은 FORCE_HTTPS의 목적 자체가 그렇기 때문입니다. 이 설정을 통해 Discourse에 보안으로 서빙되고 있음을 알리고, 링크를 그에 맞게 재작성하도록 지시하는 것입니다.

자, 어떤 요인/조건이 자산(JS/CSS) URL 프로토콜 HTTP/HTTPS에 영향을 미칠까요?

  1. 아래 주석을 해제하고 HTTP로 사이트에 액세스하면, 자산 URL도 HTTP가 됩니다.
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

이 경우 force_https를 활성화하면, 요청한 도메인에 인증서가 설치되어 있지 않으면 모든 자산 URL에서 R_SSL_PROTOCOL_ERROR 오류가 발생합니다. SSL 프로토콜 문제를 해결하려면 해당 도메인에 인증서를 설치해야 합니다.

  1. 대신 위의 템플릿 주석을 해제한 상태로 Discourse를 설치하면, 사이트의 자산 URL은 사이트 기본 URL 프로토콜과 함께 HTTPS가 되어야 합니다. 또한, force https는 관리자 UI에서 보이지 않습니다.

원래 게시물에서 언급했듯이, 제 경우에는 인증서와 모든 것이 올바르고 유효하지만, 외부와의 모든 연결은 리버스 프록시(물론 nginx입니다. ;-))를 통해 처리되고, discourse로의 연결은 unix 소켓을 통해 이루어집니다. 즉, 제가 사용하는 것은 여러분이 언급한 것들 중 어느 것도 아니라 templates/web.socketed.template.yml입니다. 그럼에도 불구하고, 정적 URL에 명시적인 http: 스키마가 하드코딩되어야 할 이유는 없습니다.