웹사이트가 https로 리다이렉트되지 않음

안녕하세요,

브라우저에 예를 들어 "thenameofmywebsite.com"을 입력하면 자동으로 보안 SSL https로 전환되지 않습니다.

discourse에서 이 설정을 변경하려면 어디서 설정해야 하나요? 감사합니다.

디스코드는 별개의 제품인데, 말씀하신 것은 디스코스(Discourse)를 의미하는 것 같습니다.

SSL은 어떻게 설정하셨나요? 이 인스턴스는 어떻게 설치하셨나요?

표준 가이드를 따랐다면 HTTPS 리디렉션은 기본적으로 작동하므로, 다른 방식으로 설치하셨거나 설치 후 설정을 변경하셨을 가능성이 있습니다.

죄송합니다, 오타였네요.

제 discourse.conf 파일입니다.

server {

    if ($host = wolcengame.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    listen [::]:80;
    server_name wolcengame.net www.wolcengame.net; 
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name wolcengame.net www.wolcengame.net;

즉, https://wolcengame.net과 www.wolcengame.net 사이에 차이가 있습니다. 첫 번째 링크는 정상적으로 작동하며 페이지가 로드되지만, 두 번째 링크를 클릭하면 https://www.wolcengame.net으로 전환되고 화면이真っ暗하며 아무것도 로드되지 않습니다.

무엇이 잘못되었는지, 어떻게 수정해야 하는지 전혀 모르겠습니다.

이 부분을 삭제한 후 nginx를 다시 시작하면 정상적으로 작동할 것입니다.

아무것도 변경된 것 같지 않습니다. 문제가 여전히 존재합니다. 다른 아이디어가 있으신가요?

해당 설정은 다양한 방법으로 변경할 수 있습니다.

  1. 선호하는 도메인으로만 HTTPS 리디렉션을 설정하세요.
  2. non-www에서 www로(또는 그 반대로) 리디렉션을 설정하세요.
  3. yml 파일에 올바른 discourse 호스트명이 설정되어 있는지 확인하세요.

Bhanu님, 안녕하세요.

  1. 제 도메인에는 https가 설정되어 있습니다(제 웹사이트 링크를 통해 이미 확인하셨을 것입니다).
  2. 제공한 코드를 통해 이미 확인하셨듯이, www에서 non-www로 리디렉션이 설정되어 있습니다.
  3. yml 파일의 discourse 호스트명은 정확합니다. 제 웹사이트가 정상적으로 운영되고 있다는 점을 확인하셨기 때문입니다.

DISCOURSE_HOSTNAME: wolcengame.net

제 discourse.conf와 동일한 구성을 가진 다른 웹사이트가 하나 더 있습니다. 그곳에서는 이러한 문제가 발생하지 않습니다.

질문은 다음과 같습니다. nginx 리디렉션에 간섭을 일으키는 discourse 측의 설정이 있는지요. 어제 모든 방법을 시도해 보았지만 이 문제를 해결할 아이디어가 더 이상 떠오르지 않습니다.

이것은 제 두 번째 웹사이트인 www.koktailmolotov.com입니다. 웹사이트에 접속해 보시면 https://koktailmolotov.com 형식으로 자동으로 리디렉션되는 것을 확인하실 수 있습니다. 이 웹사이트의 conf 설정은 제 discourse 웹사이트와 동일합니다.

모든 트래픽이 외부 nginx에 의해 처리되므로 그런 일은 불가능합니다. 여기서는 discourse가 소켓 템플릿으로 실행되고 있으며, 외부 nginx 프록시가 모든 트래픽을 처리한다고 가정하고 있습니다.

discourse에 대한 nginx 설정을 게시해 주시면 문제를 파악하는 데 도움을 드릴 수 있을 것입니다.

오늘 기준 전체 discourse.conf nginx 구성은 다음과 같습니다:

server {

listen 80;
listen [::]:80;
server_name www.wolcengame.net;
return 301 $scheme://wolcengame.net$request_uri;

}

server {

listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name wolcengame.net www.wolcengame.net;

ssl on;
ssl_certificate /etc/letsencrypt/live/wolcengame.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/wolcengame.net/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/live/wolcengame.net/dhparams.pem;
include /etc/nginx/snippets/ssl.conf;

http2_idle_timeout 5m; # up from 3m default

location / {
    proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

}

}

이 부분을 다음과 같이 변경하세요.

return 301 https://wolcengame.net$request_uri;

이 부분에서 www.wolcengame.net을 제거하고

다음과 같은 별도의 블록을 생성하세요.

listen 443 ssl;
listen [::]:443 ssl;
server_name www.wolcengame.net;
ssl_certificate /etc/letsencrypt/live/wolcengame.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wolcengame.net/privkey.pem; 
return 301 https://wolcengame.net$request_uri;

명확히 말씀드리자면, 이는 전혀 Discourse의 문제가 아닙니다.

Discourse는 하나의 FQDN(Fully Qualified Domain Name) 아래에서만 작동할 수 있습니다. 문제는 두 개의 FQDN을 설정해 두었는데 리다이렉트를 올바르게 구성하지 않았기 때문이었습니다. 이 두 가지 문제에 대한 해결책은 이미 다른 토픽에서 답변이 제시되었습니다.

정말 천재시네요. 이 방법으로 문제가 해결되었습니다. 정말 감사합니다.