1. 常见的502问题解决
对于LNMP来说,最常见的问题就是502问题了。配置完环境后,一访问网站直接提示502 Bad Gateway
。出现502的原因大致分为这么两种。
1.1. 配置错误
我们在Nginx的配置中有这么一段:
说明:
- 如果我把
fastcgi_pass
后面指定的路径配置错了,那么就会出现502的错误,因为Nginx找不到php-fpm了。 fastcgi_pass
后面可以跟socket,也可以跟ip:port
,默认监听地址为:127.0.0.1:9000
1.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
,以此类推。
1.3. 其它的情况
当然,除了上面这两种情况外,也会有其它的情况导致502发生,但很少很少。那我们如何去判定到底是什么原因导致502呢?
其实,我们有一个办法可以去排查此类问题。就是要借助Nginx的错误日志啦。在Nginx.conf中有一个参数叫做error_log
,它可以指定错误日志的路径,而错误日志其实还能定义级别。默认是crit
,该级别为最严谨的,记录日志也是最少的,有可能一些小问题我们不能发现,所以有必要把日志级别调整一下,比如error_log /usr/local/nginx/logs/nginx_error.log debug;
,这样显示的日志就会有很多,不要忘记当调试完后要把级别改为crit
,否则error_log会把磁盘撑爆。