使用nginx实现大文件上传

September 9, 2018

背景

两台外网服务器之间需要传输一个较大的文件,目标服务器有webserver。

解决方案

初步想了下,有几种思路:

  • ftp:目标服务器搭建ftp。通过ftp client上传。部署成本太高(主要是懒),放弃
  • nginx-upload-module: 较为理想的方案,使用nginx插件支持,成本小。但在编译module时卡住了,忘了之前的编译选项,加入upload module之后编译又报错,不想太折腾,放弃了。
  • 在webserver上自己实现file upload server:此方案看似成本高,翻了一下,其实还挺简单。那就动手吧

流程

http upload server搭建

方法有很多,搭建webserver第一个想到的就是node了。于是找到了express-fileupload。npm库上代码都是现成的。

Loading...

nginx路由

反向代理增加路由配置:

Loading...

并设置最大包大小,否则文件过大会被ng拒绝413 (Request Entity Too Large)

Loading...

上传

使用curl模拟表单上传:

Loading...

curl支持一次上传多个,不过upload server实现得修改支持命名。

其他

线上上传时发现上传还是失败了,因为文件太大,导致node进程OOM kill了。。

不想在折腾了,直接用split把文件切成几个小文件后上传,然后再到目标机器使用cat合并。

Loading...

在目标机器执行合并操作:

Loading...

总结起来,对比重编ng貌似也不简单:P)。。

See all postsSee all posts