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

2022-08-30 17:48:30

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

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

但是,我在文档页面上看到了以下内容:

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

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


答案 1

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

  • 伐木
  • 重写
  • 节流
  • 效率(未经测试,但我猜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并不是那么困难,我将通过猜测内置服务器的适航性来代替它,该服务器被记录为仅用于测试。


答案 2

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

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

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

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


推荐