昨天在国内服务器上安装了一个Discourse,在设置完反代后,退出了账号,然后就登录不上了。
登录提示“未知错误”,浏览器检查发现有一个session的路径报错403。在官网论坛找到了同样问题的帖子:Users can't sign in due to 403 error - Installation - Discourse Meta
原来是开启强制HTTPS导致的,按下面的步骤关闭force_https即可登录。
- SSH to server SSH 到服务器
cd /var/discourse./launcher enter apprails cSiteSetting.force_https = falseexit
果断实操一下:
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;
$scheme 是 Nginx 的一个内置变量,它表示客户端访问 Nginx 时使用的协议方案。
$scheme 的可能取值:
http- 当使用 HTTP 协议访问时https- 当使用 HTTPS 协议访问时- 其他可能的协议,如
ftp,ws,wss等(较少见)
然后后台再次开启 Force HTTPS,退出账号重新登录。嗯,这次可以了!
最后,这个问题只出现在宝塔面板中创建的反向代理,1panel中创建的自带这个规则。

