当网站打开遇到Nginx 502 bad gateway的错误,造成这种错误的原因有很多,下面分别解析nginx常见的502错误。
1、nginx配置文件错误
因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port
解决方案:
[root@bier ~]# vim/usr/local/nginx/conf/vhosts/www.conf
server
{
listen 80;
server_name www.222.com;
index index.html index.htm index.php;
root /data/www/;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock; //修改sock
#fastcgi_pass 127.0.0.1:8000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
}
检查语法是否正常
[root@bier ~]#/usr/local/nginx/sbin/nginx -t
重新加载配置文件
[root@bier ~]# /usr/local/nginx/sbin/nginx-s reload
2、php-fpm资源耗尽
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可以设置为150,8G为300以此类推
[root@bier ~]# vim/usr/local/php/etc/php-fpm.conf
pm = dynamic
pm.max_children = 150
pm.start_servers = 20
还有限制php执行时间可以在php-fpm.conf中的request_terminate_timeout设置,这是为了防止php程序的bug导致php-cgi假死。
配置完之后重启php-fpm
[root@bier ~]# /etc/init.d/php-fpm restart
3、php-fpm.conf文件设置的不是nginx的主和组
解决方案:
检查nginx是那个用户跑的
[root@bier ~]# ps aux |grep nginx
编辑php-fpm文件需要在这个php-fpm文件里面设置nginx的用户主,跟组这样才不会显示502
[root@bier ~]# vim/usr/local/php/etc/php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log =/usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/www.sock
user = php-fpm
group = php-fpm
listen.owner = nobody //定义为nginx的所属主
listen.group = nobody //定义为nginx的所属组
4、流量***导致(有可能完全是由于***导致,把***处理掉就正常打开了)
查看php-cgi是否在运行
有时候由于网站流量过大或者其它原因,导致php-cgi直接down掉,所以我们得看php-cgi是否在运行。执行如下命令:
ps -A | grep php5-cgi
如果没有运行,手动启动
/etc/init.d/php_cgi start
5、FastCGI执行时间过长
根据实际情况调高以下参数值
fastcgi_connect_timeout 200;
fastcgi_send_timeout 200;
fastcgi_read_timeout 200;
6、除了上面的几种情况还有其他的原因,但很少有,也可以借助nginx的错误日志来进行排查
vim /usr/local/nginx/logs/nginx_error.log 这个也是最直观的可以找到一些错误的信息。
转载于:https://blog.51cto.com/chenshoubiao/1841654