有很多的人一定都遇到过nginx502的情况,那么出现nginx502的原因究竟是什么呢?出现了这样的情况又应该如何去解决呢?一起来详细的了解一下吧。
一、nginx502原因和解决方法
首先我们来看一下出现nginx502的原因,以及对于这种情况的解决方法。
1、配置错误
这方面的话主要就是因为nginx找不到了php-fpm,所以就出现了502,通常来说的话,就是fastcgi_pass后面的路径配置出现了错误,后面可以是ip:port又或者是socket。
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,可以设置成150,8G就是300,以此来进行类推。
当然,nginx502原因除去上面两种原因之外,还有其他的原因。
这里的话,我们可以借助nginx的错误日志来进行排查vim /usr/local/nginx/logs/nginx_error.log。
除此之外,还可以给日志定义级别vim/usr/local/nginx/conf/nginx.conf 找到error_log,默认是crit最严谨的就可以了。
当然,也可以改成debug显示的信息最全面,可是,这样非常容易会撑爆磁盘。
首先要让浏览器进行访问,对nginx的配置文件进行修改。
[root @wqslinux~]# vim / usr / local / nginx / conf / vhosts / 111. conf server { listen 80; server_name www .111.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: 9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / data / www$fastcgi_script_name; } }
检查语法是不是正常的。
[root @wqslinux~]# / usr / local / nginx / sbin / nginx - t
重新加载配置文件。
[root @wqslinux~]# / usr / local / nginx / sbin / nginx - s reload[root @wqslinux~]# / etc / init.d / nginx reload
检查nginx是那个用户跑的。
[root @wqslinux~]# ps aux | grep nginx
对php-fpm文件进行编辑,在这个php-fpm文件里面设置nginx的用户主跟组,这样的话才不会说显示502了。
[root @wqslinux~]# 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 //定义属主 listen.group = nobody //定义属组 pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
配置完成之后,重启php-fpm。
[root @wqslinux~]# / etc / init.d / php - fpm restart
listen.owner = nobody //定义属主 listen.group = nobody //定义属组
这两个配置就是定义socket的属主和属组是谁。
除了这个以外,还有一种方式。
这样的话,nobody也能够有读取权限了。
好啦,上面就是对于nginx502原因以及解决方法的介绍了,你都了解了吗?
更多相关常见问题,请继续关注奇Q工具网来进行了解吧,希望上面的文章可以对你有所帮助呢。
推荐阅读: