调试网关错误

发布时间:作者:

您有时会遇到网关错误,通常是 502 Bad Gateway504 Gateway Timeout

这些是 Nginx 在将请求发送到 PHP 但 PHP 返回一些错误表明它无法处理请求时返回的错误。通常这些错误不是发生在您的应用程序中,而是 (通常) 在应用程序甚至处理请求之前发生的错误。

什么是网关

网关是位于 Web 服务器 (通常是 Nginx) 和您的应用程序之间的东西。对我们大多数人来说,这就是 PHP-FPM。Nginx 将使用 fastcgi 协议将 Web 请求转换为 PHP-FPM 可以理解的东西。然后 PHP-FPM 运行您的应用程序,使用它需要的信息设置 PHP (设置超全局变量 $_GET$_POST$_SESSION$_SERVER 等)。

如果 PHP-FPM 返回错误,Nginx 会给我们一个网关错误。

错误网关

当 PHP-FPM 返回错误时,会返回错误网关。这通常是以下原因之一

  1. PHP-FPM 未运行 (可能是由于太多错误)
  2. PHP-FPM 已达到其 max_children 限制,无法处理更多请求
  3. 某种类型的 PHP 错误,例如段错误

网关超时

网关超时错误通常发生在您的应用程序处理过多的流量时。这可能与 PHP-FPM max_children 错误相关 (太多它配置为处理的请求),但主要发生在您的数据库超载并且无法处理进行查询的额外连接时。返回查询需要太多时间。

如果您的应用程序进行的任何网络连接未及时返回响应,也会发生这种情况,但数据库是最常见的瓶颈。

调试网关错误

调试网关错误的 tl;dr 是日志。我从网络请求堆栈的顶部开始,然后向下移动。这意味着我检查的日志顺序是

  1. Nginx
  2. PHP-FPM
  3. 服务器资源使用情况
  4. 应用程序日志

Nginx 日志通常包含最无用的数据,尽管它可能会让您了解 PHP-FPM 未运行的问题 (如果它找不到 PHP-FPM 的套接字文件,例如 /var/run/php-fpm.sock)。

FPM 日志通常最有帮助,因为 PHP-FPM 是返回错误的网关!通常,您会看到有关达到 (或接近) max_children 限制的错误。不太常见的是,您可能会看到一个段错误 (如果您看到该错误,您可能在代码中的某个地方存在递归)。

服务器资源使用情况是我接下来要检查的内容。您可以使用 htop 或类似工具来检查 CPU/RAM 使用情况,以及哪些进程在使用它们。您还应通过 df -h 检查磁盘使用情况,以检查磁盘是否已满。

您也可能耗尽了 inode!inode 是“索引节点”,用于在 Linux 系统上跟踪文件使用情况。由于所有内容都是文件 (包括 Linux 如何处理开放的网络连接!),耗尽 inode 可能会成为问题。您可以运行 df -i 来查看每个磁盘驱动器的 inode 使用情况。

最后,我检查应用程序日志。这些日志可能显示与超时或数据库错误相关的错误,但有时问题并非特定于应用程序代码库。这些日志在网关错误中的有用性会有所不同。

Chris Fidao photo

CloudCastsServers for Hackers 教授编码和服务器。 Chipper CI 的联合创始人。

归档于
Cube

Laravel 新闻通讯

加入 40,000 多名其他开发人员,永远不会错过新的提示、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和本地和生产环境的即时反馈进行微调。

Tinkerwell
No Compromises logo

无妥协

Joel 和 Aaron,来自 No Compromises 播客的两位经验丰富的开发人员,现在可以为您的 Laravel 项目雇用。 ⬧ 固定费率为每月 7,500 美元。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

无妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

让您的项目充满活力,只需每月 2,500 美元,即可获得拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业知识和 15 天免费试用。立即安排通话!

Bacancy
Lucky Media logo

Lucky Media

立即获得 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源软件包,将现代无头电子商务功能的强大功能带入 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,包含运行现代 SaaS 所需的所有功能。付款、精美结账、管理面板、用户仪表板、身份验证、即用型组件、统计数据、博客、文档等。

SaaSykit:Laravel SaaS 启动套件
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,助力企业取得成功

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章