nginx 1.5+file upload – 最佳实践

我正在寻找通过我的nginx服务器上传文件。 我目前正在运行nginx-1.4.6并愿意根据需要将其移至最新的稳定nginx-1.5*

社区最喜欢的是Valery Kholodkov的nginx-upload-module ,在这里find。 令人遗憾的是,瓦列里不再维护这个模块,细节在这里 。 从nginx-1.3.9 ,模块部分工作或根本不工作。

我已经将nginx-upload-module编译成了nginx-1.4.6并且得到了一个似乎在nginx-1.5.3 变更集中修复的bug(Client cxn closed)。 但是我已经应用了补丁,没有运气。

阿纳托利稍微过时的职位, 在这里 ,提供了多种解决scheme,包括四个解决scheme

  • nginx的上传模块
  • nginx的,大的上载
  • 卢阿- resty上传
  • clientbodyinfileonly

当我深入到第二和第四个解决scheme(我宁愿不要让lua成为一个依赖,但我可能),我认为问这个社区是合适的:

目前用nginx-1.5+上传文件的最佳做法是什么?

让我补充一点,我正在从python POST命令上传文件并尝试使用curl进行testing。 PHP不在我的技术堆栈上。

也许你可以使用perl,如果你不喜欢php或lua。

http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods

$ R-> has_request_body(句柄)

但是,开箱即用的nginx并不是保存收到的post请求并存储的工具。

也许uWSGI( https://uwsgi-docs.readthedocs.io/en/latest/ )是使用http-socket https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html更好的方法,一个Python应用程序。;

有一个关于你的怀疑的好文章。 https://coderwall.com/p/swgfvw

我试过nginx-upload-module。 这是一个很好的解决scheme,但是,这似乎不适用于新版本。 Lua中还有一些模块可以帮助你。 在我的情况下,我有商业逻辑,然后我在我的应用程序中执行。

请记住,上传文件的大问题是FILER。 这是一个botleneck:我做了很多负载testing,让我看到了这个结论。

Nginx支持'POST'方法,在这里你可以使用大参数。 客户端可以使用php或者jsp来使用post方法build立对nginx服务器的请求。

我意识到这是一个非常古老的问题,但它是在谷歌search“nginx上传模块”的第一页,这是第一个堆栈溢出结果,所以万一这有助于其他人遇到这个问题:

我正在使用nginx 1.10.3上的nginx-upload-module。 正如原来的问题所提到的,瓦列里·霍尔霍夫不再维持这个模块。 然而,有几个不同的叉子和其他人已经修改它与新的nginx版本工作。

这个pull请求是我为了用上传模块编译nginx而使用的。

https://github.com/vkholodkov/nginx-upload-module/pull/88

如果您使用nginx和php-fpm,上传模块IMO仍然是最好的解决scheme。 这个模块允许上传完全由nginx处理,直到完成,然后处理上传的工作被传递到PHP。 所以,当你的用户上传大量文件时,php-fpm进程不会造成瓶颈。

只是一个快速的草稿,但试试这个…

 Upload.php if (isset($_FILES['dlc_file']) && !empty($_FILES['dlc_file'])) { if (empty($_FILES['dlc_file']['name']) === true) { echo = "Please choose a file to upload"; } else { $allowed = array('zip', 'rar', 'gzip', 'tar', '7z', 'png', 'jpg'); $file_name = $_FILES['dlc_file']['name']; $file_extn = strtolower(end(explode('.', $file_name))); $file_temp = $_FILES['dlc_file']['tmp_name']; if (in_array($file_extn, $allowed) === true) { $file_path = 'dlc/' . substr(md5(time()), 0, 10) . '.' . $file_extn; move_uploaded_file($file_temp, $file_path); echo = "Successfully uploaded $file_name"; } else { $file_types = implode(', ', $allowed); echo "File type is not allowed, Allowed file types $file_types"; } } } index.php <form action="upload.php" method="post" enctype="multipart/form-data> <input type="file" name="dlc_file"> <input type="submit" name="submit" value="Upload"> </form>