感谢您的回复。我之前的消息确实表述不清。实际上,我可以通过 Rails 命令成功修改 force_https 设置,这没有问题。所以,为了更清楚地说明:
在我几天前执行的上一次升级(需要重建 Docker 容器)之前,我拥有一个完全正常的解决方案:将 force_https 设置为 true,并在 nginx 配置文件的 server 部分应用以下补丁,即可实现正常登录:
if ($http_x_forwarded_proto = 'http'){
return 301 https://$host$request_uri;
}
该方案当时运行正常。然而,升级之后,同样的补丁已无法让我再次登录,系统返回了众所周知的“未知错误”(Unknown error)。
我从生产日志中获得了以下追踪信息:
Started POST "/session" for 193.134.222.4 at 2020-05-14 19:24:40 +0000
Processing by SessionController#create as */*
Parameters: {"login"=>"rossierd", "password"=>"[FILTERED]", "second_factor_method"=>"1", "timezone"=>"Europe/Zurich"}
Can't verify CSRF token authenticity.
Rendering text template
Rendered text template (Duration: 0.0ms | Allocations: 1)
Filter chain halted as :verify_authenticity_token rendered or redirected
Completed 403 Forbidden in 2ms (Views: 0.7ms | ActiveRecord: 0.0ms | Allocations: 1101)
需要说明的是,我们的 Discourse 容器运行在一台可通过 HTTPS 访问的虚拟机中。
您是否对升级前后行为变化的原因有任何想法?
目前,我已将 force_https 设置为 false,系统运行基本正常,只是左上角的标志(品牌 Logo)无法正确显示,因为它仍通过 http:// 请求引用。
顺便一提,我们网站的 URL 是:https://discourse.heig-vd.ch