网站未重定向到 https

你好,

当我在浏览器中输入例如 “thenameofmywebsite.com” 时,它没有自动跳转到安全的 SSL https。

在 Discourse 中,我可以在哪里更改此设置?谢谢。

1 个赞

Discord 是另一款产品,我猜您指的是 Discourse。

您是如何配置 SSL 的?这个实例是如何安装的?

如果您遵循了标准指南,那么 HTTPS 重定向会按默认方式工作。这表明您要么是通过其他方法安装的,要么是在安装后修改了配置。

4 个赞

抱歉,打错字了。

这是我的 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.netwww.wolcengame.net 之间存在差异。第一个链接可以正常工作并加载页面,但点击第二个链接时,它会跳转到 https://www.wolcengame.net,然后显示黑屏,没有任何内容加载。

我不知道问题出在哪里,也不知道该如何修复。

1 个赞

删除这部分,然后重启 Nginx,应该就能正常工作了。

3 个赞

我觉得没有任何变化。问题仍然存在。还有其他建议吗?

该配置可以通过多种方式更改。

  1. 仅将 HTTPS 重定向设置为您偏好的域名
  2. 设置从非 www 到 www(或反之)的重定向
  3. 确保您在 yml 文件中正确设置了 Discourse 主机名

你好,Bhanu。

  1. 我的域名已启用 HTTPS(您从我提供的网站链接中已经注意到了这一点)。
  2. 已设置从 www 到非 www 的重定向(您从我提供的代码中已经注意到了这一点)。
  3. yml 文件中的 Discourse 主机名是正确的,正如您所见,我的网站已经正常运行。

DISCOURSE_HOSTNAME: wolcengame.net

我还有另一个网站,其配置与我的 discourse.conf 相同,但那里没有类似的问题。

我的问题是:Discourse 是否有某些内容干扰了 Nginx 的重定向?我昨天尝试了所有方法,但已经想不出其他解决办法了。

这是我的第二个网站 www.koktailmolotov.com。如您所见,如果您点击该网站,它会自动重定向到 https://koktailmolotov.com 格式。其配置文件设置与我的 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; # 由 Certbot 管理
ssl_certificate_key /etc/letsencrypt/live/wolcengame.net/privkey.pem; # 由 Certbot 管理
ssl_dhparam /etc/letsencrypt/live/wolcengame.net/dhparams.pem;
include /etc/nginx/snippets/ssl.conf;

http2_idle_timeout 5m; # 从默认的 3m 提升至此

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;
4 个赞

需要明确的是,这根本不是 Discourse 的问题。

Discourse 只能在一个完全限定域名(FQDN)下运行。问题在于你配置了两个域名,且未正确配置重定向。这两个问题的解决方案在其他主题中已经解答过了。

3 个赞

您真是个天才,这解决了问题。非常感谢您。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.