LAMP 架构中,为什么 mod_php 模式 和 FastCGI 模式相比,处理 HTTP 请求时,前者基本上不会出现 502(网关错误)?
mod_php 模式下,动态请求是由同一个进程,也就是 Apache 接收到动态请求后,使用 mod_php 模块调用 PHP 解释器处理请求。动态请求的处理在同一进程内完成,不涉及额外的进程通信,因此不会出现上游服务不可达导致的 502 错误;
FastCGI 模式下,Web 服务器需要通过 socket 或 TCP 与 PHP-FPM 通信,一旦 PHP-FPM 不可用,就会返回 502 错误。
FastCGI 模式,HTTP 请求出现 502 的常见原因如下:
1、PHP-FPM 挂了,不能和PHP-FPM通信,连不上就提示 502
2、PHP-FPM 的进程池满了,也就是把请求丢过来,但是没人处理,超时了就提示 502
3、PHP 脚本执行时间太长了,超过了 fastcgi_read_timeout 指定的参数,也会返回 502
