在生产中使用PHP内置服务器

在生产中使用PHP内置服务器,php,security,webserver,Php,Security,Webserver,我最近对PHP5.4的内置Web服务器很好奇。从表面上看,似乎只要做足够的工作,就可以将传统上依赖于单独web服务器(如WordPress)的PHP应用程序作为独立脚本分发,您只需使用PHP-S localhost:80 app.PHP(或者更可能是”./WordPress.sh')即可运行。他们甚至可能附带自己的PHP解释器,该解释器具有应用程序所需的所有功能,从而无需针对多种不同版本的语言 它在某种程度上重新发明了轮子,但它肯定会增加可移植性并降低最终用户的复杂性 然而,我在网上看到了以下内

我最近对PHP5.4的内置Web服务器很好奇。从表面上看,似乎只要做足够的工作,就可以将传统上依赖于单独web服务器(如WordPress)的PHP应用程序作为独立脚本分发,您只需使用
PHP-S localhost:80 app.PHP
(或者更可能是
”./WordPress.sh'
)即可运行。他们甚至可能附带自己的PHP解释器,该解释器具有应用程序所需的所有功能,从而无需针对多种不同版本的语言

它在某种程度上重新发明了轮子,但它肯定会增加可移植性并降低最终用户的复杂性

然而,我在网上看到了以下内容:

此web服务器旨在帮助应用程序开发。它对于测试目的或在受控环境中运行的应用程序演示也很有用。它并不打算成为功能齐全的web服务器。它不应该在公共网络上使用


这显然是指诸如适当的文件系统安全性和为正确的HTTP头提供服务之类的问题,这些问题可以解决。然而,还有更多吗?在无法解决的生产环境中使用PHP内置web服务器是否存在固有的安全问题和/或技术限制?如果是这样,它们是什么?

我可以想到很多操作问题,为什么您不想这样做:

  • 伐木
  • 重写
  • 节流
  • 效率(未经测试,但我猜Nginx比PHP的内置非优化服务器快得多)
  • 与扩展Nginx、Apache和IIS(如New Relic)的任何其他工具集成
但是,有一种解决方案,您可以在使用内置的web服务器运行PHP的同时获得运行web服务器的最大好处。也就是说,您可以使用像Nginx这样的服务器作为PHP内置web服务器的反向代理。在这种情况下,HTTP将取代FastCGI,类似于Node.js应用程序中内置HTTP服务器的常见用法


现在,我不能谈论文档中警告的细节,因为我不是PHP作者之一。如果是我,我不会因为上面的原因单独运行PHP,但我可以考虑在像NGNIX这样的真实Web服务器后面运行它。不过,对我来说,用PHP-FPM和其他工具设置PHP并不是那么困难,我将不再猜测内置服务器的适航性,该服务器记录为仅用于测试。

它不适合生产使用,并且可能无法优雅地处理崩溃和内存泄漏,从而引起稳定性问题。更重要的是,PHP本身明确警告:

警告此web服务器旨在帮助应用程序开发。它对于测试目的或在受控环境中运行的应用程序演示也很有用。它并不打算成为功能齐全的web服务器。它不应该在公共网络上使用


PHP的内置服务器仅支持HTTP/1.0,这意味着客户端必须为每个请求建立新的TCP/IP连接。这非常慢。

PHP内置web服务器的问题在于它是单线程的

这会影响性能和安全性。性能影响显然是一次只能服务一个用户(在一个请求完成之前,另一个请求无法启动)

安全含义是,使用一个简单的开放式套接字发送少量数据(类似于慢速Loris),很容易对该服务器进行DOS操作


它对于简单、单页、非交互式、没有拒绝服务风险的应用程序非常有用。

我认为这个答案不是最新的。我使用7.2.5版运行,比如php-S localhost:8080&。curl-I localhost:8080,上面写着HTTP/1.1。此外,我还使用github.com/ijt/hammer对其进行了负载测试(多次点击向上箭头),它至少在hello world上进行了数千次QPS测试。可能是因为其他原因,它还没有准备好生产,但这不是原因。问题中包含了报价,这不是答案。您可以使用内置Web服务器进行日志记录和重写。然而,与真正的Web服务器相比,效率和安全性可能会有问题。。。