常见的502问题

对于LNMP来说,最常见的问题就是502了,配置完环境后,一访问网站直接提示“502 Bad Gateway".出现502的问题大致分为两种。

(1)配置错误

在Nginx中有这么一段:

location ~ \.php$ {

           finclude 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_chidren可以设置为150,尽量不要超过该数值,8G内存课设置为300,以此类推。

当然,除了这两宗情况外,也会有其他的情况导致502发生,但很少很少,那我们如何去判定到底是什么原因导致502呢?

其实,我们有一个办法可以去排查此类问题。就是要借助Nginx的错误日志,在Nginx.conf中有一个参数叫做error_log,它可以指定错误日志的路径,而错误日志其实还可以定义级别。默认是crit,该级别为最严谨的,记录日志也是最少的,有可能一些小问题我们不能发现,所以必要把日志级别调整一下,比如“error_log /usr/local/nginx/logs/nginx_error.log debug;”,这样显示的日志就会很多,不要忘记当调试完后要把级别改为cri,否则error_log会把磁盘撑爆!

[root@LHQ ~]# cd /usr/local/nginx/conf/vhosts/

[root@LHQ vhosts]# ls

111.conf  default.conf

[root@LHQ vhosts]# mv 111.conf test.conf

[root@LHQ vhosts]# vim test.conf

把文件内容更改为:

server

{

   listen 80;

   server_name www.test.com;

   index index.html index.htm index.php;

   root /data/www;

   location ~ \.php$ {

       include fastcgi_params;

       fastcgi_pass unix:/tmp/www.sock;

       #fastcgi_pass 127.0.0.1:9000;

       fastcgi_index index.php;

       fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

   }

}

检查配置文件是否正确:

[root@LHQ vhosts]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加载:

[root@LHQ vhosts]# /usr/local/nginx/sbin/nginx -s reload

或者

[root@LHQ vhosts]# /etc/init.d/nginx reload

重新载入 Nginx:                                           [确定]

打开浏览器,输入配置文件中的网址:www.test.com

显示错误:502

查看Nginx错误日志:

[root@LHQ vhosts]# vim ../nginx.conf(主配置文件)

wKioL1lBBeLykh0ZAACA-x1ii-0461.jpg

查看文档:

[root@LHQ vhosts]# cat /usr/local/nginx/logs/nginx_error.log