WP SSO + Discourse 多站点

我有两个独立的 Discourse 实例,希望将它们合并到一个多站点实例中。

我按照多站点指南设置了一个新的数据库,构建过程顺利。但问题是,当我访问实例 B 的域名时,它会被重定向到实例 A(即最初与 WordPress SSO 绑定的那个)。这意味着:

  1. 访问 https://instanceb.discourse
  2. 会被重定向到 https://instancea.discourse
  3. 然后又被重定向到 WordPress 登录页面。

如何让新的多站点容器正常显示?

我不介意第二个容器也需要 SSO——它之前并未配置过。

由于我无法加载实例 B,因此无法对其进行配置或导入配置。

我使用反向 Nginx 代理来访问这两个实例。

感谢任何帮助。

嘿,Tim,

这个问题更多是关于 Discourse 多站点配置的,因为你的问题似乎出在两个 Discourse 多站点实例之间的关系,以及它们之间可能设置的路由上。WordPress SSO 并不是这里的问题,因此我已将你的主题重新归类到 #support。

我想提醒你注意 Discourse 多站点 howto 中的以下警告:

虽然 Discourse 应用支持多站点,但这属于高级系统管理员级别的配置。如果你不清楚自己在做什么,请不要设置多站点。Discourse 团队无法提供多站点配置方面的支持。

由于我们在 Support > WordPress 中的重点更多是 WordPress 插件本身,而我本人也不是 Discourse 多站点专家,你最好的办法可能是看看社区中是否有人能为你指明方向,或者在 Marketplace 中聘请专业人士来帮助你。

2 个赞

这听起来像是多站点配置的问题。您参考的是哪份指南?

我遵循了以下指南:

我最大的猜测是,您的反向代理配置有误,将站点 2 重定向到了站点 1;或者曾经发生过这种情况,而您的浏览器缓存了该 301 重定向。

我正在使用标准的 nginx 代理配置。我做的唯一更改是在 server_name 中添加了 instanceb,以便将流量路由到容器。对于 Discourse 多站点部署,是否有其他实现方式?

server {
    listen 443 ssl http2; listen [::]:443 ssl http2;
    server_name instancea.mydomain.com instanceb.mydomain.com

    ssl on;

        ssl_certificate /var/www/vhosts/mydomain.com.csr;
        ssl_certificate_key /var/www/vhosts/mydomain.com.key;

    ssl_session_tickets off;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

    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_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;
    }
}