对于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会把磁盘撑爆!
[[email protected] ~]# cd /usr/local/nginx/conf/vhosts/
[[email protected] vhosts]# ls
111.conf default.conf
[[email protected] vhosts]# mv 111.conf test.conf
[[email protected] 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;
}
}
检查配置文件是否正确:
[[email protected] 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
重新加载:
[[email protected] vhosts]# /usr/local/nginx/sbin/nginx -s reload
或者
[[email protected] vhosts]# /etc/init.d/nginx reload
重新载入 Nginx: [确定]
打开浏览器,输入配置文件中的网址:www.test.com
显示错误:502
查看Nginx错误日志:
[[email protected] vhosts]# vim ../nginx.conf(主配置文件)
查看文档:
[[email protected] vhosts]# cat /usr/local/nginx/logs/nginx_error.log