在运行 PHP 应用程序时,选择正确的 Web 服务器至关重要。为了可靠地评估流行服务器的性能,我们不使用合成数据而是使用真实数据进行测试。我们不想对运行 PHP 应用程序的 Web 服务器进行自己的评级。我们的目标是展示特定网络服务器在何种条件下能够呈现最佳效果。
PHP 运行时应用程序:30 年的演变
一开始是 CGI。它是最早运行服务器端脚本的技术之一,出现于90年代。 CGI 支持不同的语言,这使得该接口非常 台灣電郵 通用,但也有其自身的缺点。例如,对于每个请求,服务器都会为每个CGI脚本创建一个单独的进程,这会导致系统资源的过度使用,并极大地影响服务器的性能和响应速度。另一个已知问题是使用 Web 服务器用户的权限运行脚本。那些。如果服务器配置不正确,CGI 脚本不仅可以访问另一个应用程序的文件和资源,还可以访问服务器的日志和配置,从而产生潜在的漏洞。
为了解决这些问题,Apache 和 mod_php 模块被开发出来,它允许 PHP 代码直接在 Web 服务器内部运行,并为每个主机设置单独的文件权限。尽管仍然为每个请求创建一个单独的进程,但一些数据被缓存,与 CGI 相比,这显著加快了执行速度。这显著提高了速度。
Apache + mod_php 因其配置简单而变得流行。 Apache 仍然是 Web 上流行的 Web 服务器之一,并且经常用于快速创建某些内容且不需要太多配置。
网络服务器的普及度和市场份额。
但是使用 Apache 来提供静态 瑞典商业名录 内容并不是最好的解决方案:即使接收图像,也将使用“重型”(带有所有模块,如 mod_php)处理程序。
将 Apache 与 Nginx 一起使用被认为是一种很好的做法。 Nginx 有效地处理静态内容的传递,并将需要 PHP 代码执行 这些应用程序还允许您测试您的互联 的请求重定向到 Apache。这大大减少了内存消耗并提高了查询处理速度。
Web 服务器处理请求的方案。
将 Nginx 和 Apache 与 mod_php 结合起来可以显著提高性能,但是 mod_php 模块有一个瓶颈:它在每个 Apache 进程的上下文中运行 php 解释器,这大大增加了资源使用率。
为了更高效地运行 PHP,开发了 PHP-FPM(FastCGI 进程管理器)——它是 FastCGI 的扩展版本,旨在提高高负载环境下的性能和可靠性。与 mod_php 不同,FPM 运行一个工作进程池,独立于 Web 服务器本身处理请求。重要的是要记住,需要进行详细的调整才能实现最佳性能。还值得考虑的是,一些 CMS(WordPress、1C-Bitrix:站点管理)将需要额外的配置,因为某些规则存储在 .htaccess 文件中(即,它们设计为通过 Apache 运行)。
还有什么其他方法可以加快 PHP 脚本的速度吗?不止一位开发人员问过自己这个问题。在寻找解决方案的过程中,我们发现了一些从根本上改变处理请求方法的技术:
- 支持长寿命进程。与每次发出新请求时初始化应用程序的传统方法不同,整个应用程序只需加载到内存中并用于处理传入的请求。
- 应用程序级 HTTP 服务器。消除服务器和应用程序之间的额外层,从而减少开销。
- 多线程。允许应用程序在单个进程内同时处理更多请求。
- 最小化与 FastCGI 交互的开销。通过删除与 FastCGI 的交互并本地使用 PHP 代码,我们消除了处理每个请求的开销。