我正在使用与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标头永远不会被设置?
答案 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标头