我的Rails 5应用程序上有一个简单的反馈表单,它在POST
s上失败了CSRF验证 - 但仅限于生产中。更具体地说,生产服务器是foo.example.com
,但服务由代理服务器proxy.example.com
访问。在代理上运行了一个Nginx服务器,用于将请求路由到相应的应用程序服务器。
如果我直接浏览http://foo.example.com
并提交表格,一切都很好。但是在查看https://proxy.example.com
时提交相同的表单,我得到了CSRF失败。两个访问路由之间存在两个主要差异:代理请求重写,以及http
与https
。我不确定哪个是相关因素。
有一种理论认为会话商店使用的域名不正确,但我尝试了将domain:
传递给Rails.application.config.session_store
的各种变体,但没有一个产生任何差异。在那之后,我宁愿用尽假设在哪里看。