假设我有一个Rgin 2.3.2应用程序,由Nginx提供,由mongrel服务,我需要通过Rails服务一个大型静态文件(以控制对它的访问).我希望Rails应用程序将文件的转移委托给Nginx,以避免阻止mongrel实例.
可用的信息似乎是矛盾和不完整的. This post显示了如何使用Apache,并提示它也可以使用ngninx – 但没有例子. This post和this post显示了如何使用一个显然是Rails 2.3的插件来做到这一点. This post建议,也许没有支持x-sendfile与Nginx毕竟.
我宁愿不用Rails现在可以自己做的事情插入插件.
有没有人得到x-sendfile的行为工作使用没有插件和Rails 2.3 / Nginx / mongrel?如果没有,最好的文档是使用一个插件(和/或monkeypatch)和Rails 2.3 / Nginx / mongrel?
最佳答案
主要思想:所有的控制器都是设置Nginx x-accel-redirect标题.一旦你的控制器方法返回(这将非常快),Nginx将看看您的Rails应用程序设置的标题.如果设置了x-accel-redirect,那么Nginx会提供静态文件.
你的控制器看起来像:
def show
@attachment = Attachment.find(params[:id])
# Do anything else you need for authentication,etc.
head(:x_accel_redirect => '/files/' + @attachment.filename,:content_type => @attachment.content_type,:content_disposition => "attachment; filename=\"#{@attachment.filename}\"")
end
这一点不会做的伎俩.您还需要告诉Nginx有关位于$RAILS_ROOT / files的文件.将其添加到服务器块内的Nginx配置结尾:
location /files {
root /path/to/rails_app;
internal;
}
将静态文件放到$RAILS_ROOT / files中,它应该可以工作.不需要插件或monkeypatching测试与Rails 2.3.2和2.3.14.
原文地址:https://www.jb51.cc/nginx/435029.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。