调用send_file时,X-Accel-Redirect从未在rails 4应用程序中设置

时间:2015-06-16 15:09:55

标签: ruby-on-rails sendfile x-accel-redirect

我正在使用与Puma和Nginx一起提供的rails 4应用程序。在尝试直接投放我设置的某些文件时

config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" 

在config / environments / production.rb中,我可以确认设置是否存在。但是当我像这样调用send_file时:

send_file(asset.asset.path(style), disposition: 'inline', type: asset.asset_content_type)

并通过记录" response.headers.inspect"来检查是否存在X-Accel-Redirect标头。或检查Puma通过记录套接字流量发送到Nginx的标头,它永远不会存在。

为什么X-Accel-Redirect标头永远不会被设置?

1 个答案:

答案 0 :(得分:1)

显然它的工作方式是nginx必须首先向应用程序发送一个X-Accel-Mapping标头,然后它会响应一个X-Accel-Redirect标头和你给send_file的值。

所以在我的nginx配置中我添加了类似的内容:

location @ruby{
  ...
  proxy_set_header X-Accel-Mapping /app/current/private/=/private_files/;
}

location /private_files/ {
  internal;
  alias /app/current/private/;
}

然后应用程序开始创建X-Accel-Redirect标头