【问题标题】:The ideal web server for PHP to handle large file uploads?PHP 处理大文件上传的理想 Web 服务器?
【发布时间】:2012-04-25 00:28:55
【问题描述】:

我正在对一个文件上传 API 进行技术规范,该 API 将处理大量大型 (250MB+) 文件。

我想尽可能避免的是网络服务器在文件上传期间占用了整个内存负载,我知道这在某种程度上是可以避免的。

另外,我不能使用 Flash 或 Silverlight 来拆分文件,这可能会显着减少内存使用量。

我了解 PHP 在很大程度上依赖于其主机 Web 服务器软件的上传性能。考虑到这一点,Apache 是最适合这项工作的还是我应该考虑使用 nginx 或其他?

如果 PHP 本身是最大的瓶颈,那么是否值得考虑某种混合解决方案?如果是这样,它会是什么语言?

【问题讨论】:

  • nGinx 在 Apache 之上会先将文件保存到磁盘,然后再将其传输到 Apache/PHP。你也可以在 nGinx 中控制很多缓冲区和东西。

标签: php apache http upload nginx


【解决方案1】:

尽管 Daniel Ribeiro 说了什么,我还是建议您将这些上传远离 Apache。您需要一个基于事件的服务器(Apache 的实现很好,但恕我直言,不如 nginx / lighttpd 好)。问题只是间接地出现在内存上——它与客户端数量和带宽有关。拆分文件并没有真正的帮助。

OTOH,没有什么可以阻止您使用 nginx 来处理上传并使用 apache 来为网站的其余部分提供服务。

您将从调整 TCP/IP 堆栈以处理 LFN(大拥塞窗口、tcp 窗口缩放)中获得很多好处。

我了解 PHP 在很大程度上依赖于其主机 Web 服务器软件的上传性能

上传的性能与 PHP 无关,除非您尝试使用原始套接字/Web 套接字和后端的 PHP 来实现上传。实际上,从 nginx 调用(分叉)PHP 解释器来处理文件是有意义的 - 因为这个 仅在文件上传时启动

【讨论】:

  • 所以 nginx 会为 PHP 上传脚本提供服务,而 Apache 会处理其他所有事情?还是 nginx 自己会做处理?
  • 这取决于你。 Apache 是一个与 nginx 非常不同的工具 - 如果您不介意这些差异,只需使用 nginx
【解决方案2】:

您可以同时使用 Apache 和 Nginx,这真的太棒了!

两者之间的一些比较是:

  • Apache 是基于进程的服务器; nginx,一个基于事件的服务器。
  • Nginx 和 Lighttpd 可能是最著名的两个异步服务器;
  • Apache 无疑是最著名的基于进程的服务器。

Further info here.

【讨论】:

  • “异步服务器”?真的吗?基于事件的服务器必须使用异步 I/O,但这并不意味着它是“异步服务器”
  • @DanielRibeiro 这并没有告诉我太多关于它如何应用于我的情况;你的回答除了一点点花言巧语和指向其他网站的链接之外没有什么价值。
【解决方案3】:

我会考虑将nginxfile upload 模块一起使用,因为您可以避免通过PHP 传递上传。

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2015-03-29
    • 2011-11-09
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多