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

问题描述 投票:0回答:4

我最近对 PHP 5.4 的内置网络服务器感到好奇。从表面上看,虽然相当准系统,但通过足够的工作,可以将传统上依赖于单独 Web 服务器(例如 WordPress)的 PHP 应用程序分发为独立脚本,您可以使用

php -S localhost:80 app.php
运行(或者,更有可能,
'./wordpress.sh'
)。他们甚至可能附带自己的 PHP 解释器,该解释器具有应用程序所需的所有功能,这将消除针对该语言的许多不同版本的需要。

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

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

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

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

php security webserver
4个回答
20
投票

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

  • 记录
  • 重写
  • 节流
  • 效率(未测试,但我猜测 Nginx 比 PHP 内置的非优化服务器快很多)
  • 与任何其他扩展 Nginx、Apache 和 IIS 的东西集成(例如 New Relic)

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

现在,我无法详细说明文档中的警告,因为我不是 PHP 作者之一。如果是我,由于上述原因,我不会单独运行 PHP,但我可能会考虑在 Nginx 等真正的 Web 服务器后面运行它。但对我来说,使用 PHP-FPM 设置 PHP 并不那么困难,我会猜测内置服务器的适航性,该服务器被记录为仅用于测试。


15
投票
单线程

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

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

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


3
投票


0
投票
不能很好地处理断开连接

,所以在这种情况下,你需要从头开始重新下载文件

© www.soinside.com 2019 - 2024. All rights reserved.