代码之家  ›  专栏  ›  技术社区  ›  Rich Apodaca

使用x-sendfile通过Rails 2.3通过Nginx提供大文件

  •  11
  • Rich Apodaca  · 技术社区  · 17 年前

    现有信息似乎相互矛盾,不完整。 This post This post this post 展示如何使用一个显然是Rails2.3不必要的插件来实现它。 This post 这意味着可能根本不支持使用nginx的x-sendfile。

    我不想为了Rails现在可以自己做的事情而乱搞插件。

    1 回复  |  直到 17 年前
        1
  •  24
  •   s01ipsist    13 年前

    主要思想:控制器所做的就是设置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\u ROOT/files的文件。将其添加到服务器块内的nginx配置的末尾:

    location /files {
      root /path/to/rails_app;  
      internal;  
    }
    

    将静态文件放入$RAILS\u ROOT/files中,它应该可以工作。无需使用Rails 2.3.2和2.3.14测试插件或monkeypatching。

    推荐文章