LNMP--常见的502问题
LNMP--常见的 502 问题
对于 LNMP 来说,最常见的就是 502 问题了。配置完环境后,一访问网站直接提示“502 Bad Gateway”。出现 502 的原因大致分为两种。
(1)配置错误
我们在 nginx 中配置过这么一段。
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}
如果把 fastcgi_pass 后面的路径配置错了,那么就会出现 502 的错误,因为 nginx 找不到 php-fpm 了。fastcgi_pass 后面可以跟 socket 也可以跟 ip:port,默认监听地址为 127.0.0.1:9000。
(2)资源耗尽
LNMP 架构处理 PHP 时,是 nginx 直接调取后端的 php-fpm 服务,如果 nginx 的请求量偏高,而我们又没有给 php-fpm 配置足够的子进程,那么总有 php-fpm 资源耗尽的时候,一旦耗尽 nginx 则找不到 php-fpm,此时就会导致 502 出现。那这时候的解决方案就是去调整 php-fpm.conf 中的 pm.max_children 数值,使其增加。但也不能无限设置,毕竟服务器的资源有限,根据经验,4G 内存机器如果只跑 php-fpm 和 nginx,不跑 MySQL 服务,pm.max_children 可以设置为 150,尽量不要超过该数值,8G 内存可以设置为 300,以此类推。
当然,除了这两种情况外,也会有其他情况导致 502 发生,但很少很少。我们有一个办法可以去排查此类问题。就是要借助 nginx 的错误日志。在 nginx.conf 中有一个参数是 error_log ,它可以指定错误日志的路径,而错误日志其实还能定义级别。默认是 crit,该级别是最严谨的,记录日志也是最少的,有可能一些小问题我们不能发现,所以有必要把日志级别调整一下,比如“error_log /usr/local/nginx/logs/nginx_error.log debug;”,这样显示的日志就会有很多,不要忘记当调试完后要把级别改回 crit,否则 error_log 会把磁盘撑爆。