23

Discourse无法登录 提示未知错误 session报403错误的解决办法

秦始黄
·3天前

昨天在国内服务器上安装了一个Discourse,在设置完反代后,退出了账号,然后就登录不上了。

登录提示“未知错误”,浏览器检查发现有一个session的路径报错403。在官网论坛找到了同样问题的帖子:https://meta.discourse.org/t/users-cant-sign-in-due-to-403-error/56449

原来是开启强制HTTPS导致的,按下面的步骤关闭force_https即可登录。

  1. SSH to server SSH 到服务器
  2. cd /var/discourse
  3. ./launcher enter app
  4. rails c
  5. SiteSetting.force_https = false
  6. exit

果断实操一下:

text
root@123:~# cd /www/dk_project/dk_app/discourse/ root@123:/www/dk_project/dk_app/discourse# ./launcher enter app x86_64 arch detected. root@123-app:/var/www/discourse# rails c Loading production environment (Rails 8.0.3) discourse(prod)> SiteSetting.force_https = false => false discourse(prod)> exit root@123-app:/var/www/discourse#

操作之后确实可以登录了,但治标不治本。 Discourse创始人 Jeff Atwood说:

通常是因为您正在进行内部代理,但没有在代理中设置 https 转发标头。

然后按照这个思路,我在Nginx反代规则里加了一行:proxy_set_header X-Forwarded-Proto $scheme;

image.png

$scheme 是 Nginx 的一个内置变量,它表示客户端访问 Nginx 时使用的协议方案。

$scheme 的可能取值:

  • http - 当使用 HTTP 协议访问时
  • https - 当使用 HTTPS 协议访问时
  • 其他可能的协议,如 ftp , ws , wss 等(较少见)

然后后台再次开启 Force HTTPS,退出账号重新登录。嗯,这次可以了!

最后,这个问题只出现在宝塔面板中创建的反向代理,1panel中创建的自带这个规则。

image.png

天下米友是一家,米市行情靠大家!

回复讨论
0

登录后可参与回复讨论。

当前还没有回复,欢迎成为第一个参与讨论的人。

文明发言,理性讨论