使用php + nginx环境调试时遇到网关错误的解决流程步骤
技术  /  管理员 发布于 1个月前   69
当你调试时有时会遇到网关错误,通常是 502 Bad Gateway 或 504 Gateway Timeout。
当 Nginx 向 PHP 发送请求,但 PHP 返回错误信息说无法处理请求时,Nginx 就会返回这些错误。
通常情况下,这些错误不是应用程序中发生的错误,而是(通常)在应用程序处理请求之前发生的错误。
什么是网关
网关是位于网络服务器(通常是 Nginx)和应用程序之间的东西。
对于大多数人来说,这就是 PHP-FPM。
Nginx 会使用 fastcgi 协议将网络请求转换为 PHP-FPM 可以理解的内容。
然后,PHP-FPM 运行应用程序,用它需要的信息设置 PHP(设置超全局 $_GET、$_POST、$_SESSION、$_SERVER 等)。
如果 PHP-FPM 返回错误,Nginx 会给出网关错误。
网关错误
当 PHP-FPM 返回错误时,会返回 Bad Gateway。
通常是以下情况之一
PHP-FPM 未运行(可能是由于错误太多)
PHP-FPM 已达到其 max_children 限制,无法处理更多请求
某种 PHP 错误,如 segfault
网关超时
网关超时错误通常发生在应用程序处理过多流量时。这可能与 PHP-FPM 的 max_children 错误(配置处理的请求过多)相对应,但主要发生在数据库超载,无法处理更多查询连接时。返回查询需要花费太多时间。
如果应用程序的任何网络连接没有及时返回响应,也会出现这种情况,但数据库是最常见的瓶颈。
调试网关错误
调试网关错误的关键是日志。我从网络请求堆栈的顶层开始向下检查。这意味着我检查日志的顺序是
Nginx
PHP-FPM
服务器资源使用情况
应用程序日志
Nginx 日志中的数据通常最无用,尽管它可能会提示 PHP-FPM 未运行的问题(如果它找不到 PHP-FPM 的套接字文件,例如 /var/run/php-fpm.sock)。
FPM 日志通常是最有用的,因为 PHP-FPM 是返回错误的网关!
通常你会看到一个关于达到(或接近)max_children 限制的错误。
比较少见的是设置错误(setfault)(如果出现这种情况,可能是代码中出现了递归)。
接下来我会检查服务器资源使用情况。
你可以使用 htop 或类似软件来检查 CPU/RAM 的使用情况,以及哪些进程在使用它们。
你还应该通过 df -h 检查磁盘使用情况,看看磁盘空间是否用完。
Inodes 也可能用完!Inodes 是 "索引节点",用来跟踪 Linux 系统中文件的使用情况。
因为所有东西都是文件(包括 Linux 如何处理打开的网络连接!),所以 Inodes 用完可能是个问题。
你可以运行 df -i 查看每个磁盘驱动器的索引节点使用情况。
最后,我会检查应用程序日志。
这些日志可能会显示与超时或数据库错误有关的错误,但有时问题并不是应用程序代码库特有的。
这些日志对网关错误的有用程度各不相同。
路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..博主 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 @ mashrdn 多切换几个节点测试,免费ssr是没那么稳..mashrdn 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 V2rayn免费节点添加上去了,youtobe无法打开网页,是怎么回事..张伟 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 3q!有用,不过免费节点隔天就要去git上复制新的导进去..博主 在
科学上网翻墙访问Google , 上外网神器佛跳墙VPN(永久免费)使用流程步骤中评论 该篇教程已不能用了,告知大家,免的老有老铁问我!..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号