LNMP--常见的502问题

2018-01-20

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 会把磁盘撑爆。


标题:LNMP--常见的502问题
作者:散宜生
地址:https://17kblog.com/articles/2018/01/20/1516422253733.html