File upload 通过代理将文件从Backbone.js上传到基于Rails的API的最佳方式?

File upload 通过代理将文件从Backbone.js上传到基于Rails的API的最佳方式?,file-upload,backbone.js,proxy,nginx,rack,File Upload,Backbone.js,Proxy,Nginx,Rack,我们有一个Backbone.js应用程序,支持使用plupload上传文件。目前,上传是通过代理机架反向代理发送的,但很快就会通过API切换到直接的nginx,再切换到单独的Rails应用程序 这个API已经使用了相当长的一段时间,可以处理数百MB的上传。我们认为这不是问题所在 然而,当通过BB.js和代理执行上传时,它们可以在不同的点停止,但大多数情况下都是在低于1.5MB的点 值得注意的是,在相同的情况下,尝试上载多个小于1MB的文件都可以正常工作。我可以上传100个1MB的文件,但是我不能

我们有一个Backbone.js应用程序,支持使用plupload上传文件。目前,上传是通过代理机架反向代理发送的,但很快就会通过API切换到直接的nginx,再切换到单独的Rails应用程序

这个API已经使用了相当长的一段时间,可以处理数百MB的上传。我们认为这不是问题所在

然而,当通过BB.js和代理执行上传时,它们可以在不同的点停止,但大多数情况下都是在低于1.5MB的点

值得注意的是,在相同的情况下,尝试上载多个小于1MB的文件都可以正常工作。我可以上传100个1MB的文件,但是我不能上传任何超过2MB的文件

我们从BB.js应用程序中得到的一些例外是:

未捕获的语法错误:输入意外结束 语法错误:JSON分析错误:意外的EOF 最好的方法是什么?罪魁祸首似乎是网络连接速度较慢,通过基于光纤的家庭网络上传到服务器的过程往往会完成,而通过DSL线路上传的工作往往会失败,但我无法想象这是千篇一律的

这是我们的代理设置吗?切换到nginx会解决这个问题吗?为此目的设置nginx的最佳方法是什么

编辑以回答毛里西奥的评论:

没有从服务器返回任何内容。以下是WebKit Network Inspector报告的标题主机名已更改:

Request URL:http://our.site.com/api/files
Request Headersview source
Content-Length:131661475
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHwVBiFW8AIuh18Bt
DNT:1
Origin:http://our.site.com
Referer:http://our.site.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
Request Payload
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="name"

861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file_entry[folder_id]"

32984
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file"; filename="861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg"
Content-Type: video/mpeg


------WebKitFormBoundaryHwVBiFW8AIuh18Bt--

之后,没有回应。检查器将状态和时间报告为挂起。在最近的这个例子中,传输大小是0B,尽管我知道数据是发送的,因为我可以监控出站流量达到900K/秒,可能持续10-15秒,然后下降到正常的1-2K/秒。

这一切归结为nginx配置。尚未设置客户端\u max\u body\u size指令。默认值为1M。这似乎解决了这个问题

客户端\u最大\u正文\u大小的nginx wiki条目说明:

应该注意的是,web浏览器通常不知道如何正确显示这种HTTP错误


我还没有检查Chrome和Safari是如何处理413返回代码的,但这可以解释为什么我似乎根本没有收到服务器的响应。

这一切归结为nginx配置。尚未设置客户端\u max\u body\u size指令。默认值为1M。这似乎解决了这个问题

客户端\u最大\u正文\u大小的nginx wiki条目说明:

应该注意的是,web浏览器通常不知道如何正确显示这种HTTP错误


我还没有检查Chrome和Safari如何处理413返回代码,但这可能解释了为什么我似乎根本没有收到服务器的响应。

浏览器收到的输出是什么?您是否使用CURL或类似的工具进行了相同的调用,并查看它是否通过代理工作?Maurício,我已经添加了详细信息。如果您需要更多,请告诉我。浏览器接收到的输出是什么?您是否使用CURL或类似的工具进行了相同的调用,并查看它是否通过代理工作?Maurício,我已经添加了详细信息。如果你需要更多,请告诉我。