我最近对 PHP 5.4 的内置网络服务器感到好奇。从表面上看,虽然相当准系统,但通过足够的工作,可以将传统上依赖于单独 Web 服务器(例如 WordPress)的 PHP 应用程序分发为独立脚本,您可以使用
php -S localhost:80 app.php
运行(或者,更有可能,'./wordpress.sh'
)。他们甚至可能附带自己的 PHP 解释器,该解释器具有应用程序所需的所有功能,这将消除针对该语言的许多不同版本的需要。
它在某种程度上重新发明了轮子,但它肯定会提高可移植性并降低最终用户的复杂性。
但是,我在文档页面上看到了以下内容:
此 Web 服务器旨在帮助应用程序开发。它还可用于测试目的或在受控环境中运行的应用程序演示。它并不是一个功能齐全的 Web 服务器。它不应该在公共网络上使用。
这显然是指适当的文件系统安全性和提供正确的 HTTP 标头等问题,这些问题是可以解决的。然而,还有更多的事情吗?在生产环境中使用 PHP 的内置 Web 服务器是否存在无法解决的固有安全问题和/或技术限制?如果有,它们是什么?
我可以想到很多操作问题,为什么你不想这样做:
但是,有一个解决方案,您可以在获得运行 PHP 及其内置 Web 服务器的大部分好处的同时,获得在前端运行 Web 服务器的大部分好处。也就是说,您可以使用 Nginx 这样的服务器作为 PHP 内置 Web 服务器的反向代理。在这种情况下,HTTP 成为 FastCGI 的替代品,类似于 Node.js 应用程序中内置 HTTP 服务器的常见用法。
现在,我无法详细说明文档中的警告,因为我不是 PHP 作者之一。如果是我,由于上述原因,我不会单独运行 PHP,但我可能会考虑在 Nginx 等真正的 Web 服务器后面运行它。但对我来说,使用 PHP-FPM 设置 PHP 并不那么困难,我会猜测内置服务器的适航性,该服务器被记录为仅用于测试。
! 这会对性能和安全产生影响。性能影响显然是一次只能为一个用户提供服务(直到一个请求完成,另一个请求无法启动)。
安全隐患是,使用发送少量数据的简单开放套接字(类似于 Slow Loris),对该服务器进行 DOS 操作非常容易。
对于没有拒绝服务风险的简单、单页、非交互式应用程序非常有用。
,所以在这种情况下,你需要从头开始重新下载文件