我有一个新的Padrino 0.13.1项目,我正在AWS Elastic Beanstalk工作者实例上托管。 worker实例有一个cron作业,在我的Padrino应用程序中每5分钟调用一次POST。我已经按如下方式定义了例程:
post :myroutine, :with => :myparams, :csrf_protection => false do
# ... do some stuff
status 200
end
我还配置了/config/apps.rb
如下:
Padrino.configure_apps do
set :session_secret, '...'
set :protection, :except => :path_traversal
set :protection_from_csrf, true
set :allow_disabled_csrf, true
end
工作者实例每5分钟向http://localhost:80/myroutine/somevar发帖一次。 nginx access.log
文件显示:
127.0.0.1 - - [21 / Mar / 2016:04:49:59 +0000]“POST / myroutine / 01234 HTTP / 1.1”200 0“ - ”“aws-sqsd / 2.0”“ - ”
但是在我的AWS production.log
文件中,我也看到每5分钟就出现一次:
WARN - 21 / Mar / 2016 04:49:59 Rack :: Protection :: AuthenticityToken报道攻击
奇怪的是,例程执行正常,并完成它应该做的事情。我只想阻止我的日志文件每隔5分钟填满Rack::Protection
错误。
这是因为某个地方的csrf设置配置错误还是错误?
答案 0 :(得分:1)
它是由nginx反向代理设置引起的。
可能丢失http相关信息,结果会话信息丢失。
https://github.com/znc/znc/issues/946 我只是添加以下行,它的工作原理:
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_pass_header Set-Cookie;