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

时间:2014-10-08 12:43:08

标签: php security webserver

我最近对PHP 5.4的内置网络服务器感到好奇。从表面上看,虽然相当准确,但有足够的工作,可以将传统上依赖于单独的Web服务器的PHP应用程序(如WordPress)作为独立脚本分发,您可以使用php -S localhost:80 app.php运行(或者,更有可能的是,'./wordpress.sh')。他们甚至可能附带自己的PHP解释器,它具有应用程序所需的所有功能,这样就无需针对许多不同版本的语言。

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

但是,我在documentation page上看到了以下内容:

  

此Web服务器旨在帮助应用程序开发。它也可用于测试目的或在受控环境中运行的应用程序演示。它不是一个功能齐全的Web服务器。它不应该在公共网络上使用。

这显然会引用正确的文件系统安全性和提供正确的HTTP标头等问题,这些问题可以解决。但是,还有更多吗?在无法解决的生产环境中使用PHP的内置Web服务器是否存在固有的安全问题和/或技术限制?如果是这样,他们是什么?

4 个答案:

答案 0 :(得分:16)

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

  • 登录
  • 重新写入
  • 节流
  • 效率(未经测试,但我猜测Nginx比PHP的内置非优化服务器快很多)
  • 与扩展Nginx,Apache和IIS(New Relic等)的其他任何内容集成

但是,有一个解决方案,您可以通过其内置的Web服务器获得运行PHP的大部分好处,同时获得预先运行Web服务器的大部分好处。也就是说,您可以使用像Nginx这样的服务器作为PHP内置Web服务器的反向代理。在这种情况下,HTTP成为FastCGI的替代品,类似于Node.js应用程序中内置HTTP服务器的常见用法。

现在,由于我不是PHP作者之一,我无法在文档中说明警告的细节。如果是我,我不会因为上述原因单独运行PHP,但我可能考虑在像Nginx这样的真实Web服务器后面运行它。不过对我来说,使用PHP-FPM设置PHP并没有那么困难,我会考虑一下内置服务器的适航性,该内置服务器只能用于测试。

答案 1 :(得分:6)

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

这会影响性能和安全性。对性能的影响显然是一次只能为一个用户提供服务(直到一个请求完成,另一个请求无法启动)。

安全隐患是,使用简单的开放套接字发送少量数据(类似于Slow Loris),使DOS服务器很容易。

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

答案 2 :(得分:3)

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

答案 3 :(得分:-3)

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

  

警告此Web服务器旨在帮助开发应用程序。它也可用于测试目的或在受控环境中运行的应用程序演示。它不是一个功能齐全的Web服务器。它不应该在公共网络上使用。

http://php.net/manual/en/features.commandline.webserver.php