005_常见的502错误

常见的502错误

1. 配置错误

因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port;

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以此类推;

3. 其他原因

除了上面的两种错误还有其他的原因,一般很少有,我们可以借助nginx的错误日志来进行排查:

cat /usr/local/nginx/logs/nginx_error.log

我们也可以给日志定义级别:vim/usr/local/nginx/conf/nginx.conf 找到error_log,默认是crit最严谨的就行,也可以改成debug显示的信息最全面,但是很容易撑爆我们的磁盘。

3.1 修改 nginx 的配置文件

首先我们需要让浏览器进行访问

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;
    }
}

3.2 检查语法是否正常

/usr/local/nginx/sbin/nginx -t

3.3 重新加载配置文件

/usr/local/nginx/sbin/nginx-s reload

/etc/init.d/nginx reload

3.4 检查 nginx 是哪个用户跑的

ps aux |grep nginx

3.5 编辑 php-fpm 文件

我们要在这个php-fpm文件里面设置nginx的用户主,跟组这样才不会显示502

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

3.6 重启 php-fpm

/etc/init.d/php-fpm restart

补充: 近期很多同学遇到的问题
这种情况下,使用的是socket,版本高于5.4(含5.4) 默认监听的socket文件权限是所有者只读,属组和其他用户没有任何权限。所以,nginx的启动用户(咱们配置的是nobody)就没有办法去读这个socket文件,最终导致502,这个问题可以在nginx的错误日志中发现。解决办法很简单,上面给出的配置文件中就有避免这个问题的配置。

listen.owner = nobody    //定义属主
listen.group = nobody    //定义属组

这两个配置就是定义socket的属主和属组是谁。除了这个还有一种方法

listen.mode = 666

这样nobody也可以有读取权限了。

原文地址:https://www.cnblogs.com/cy-8593/p/12333631.html

时间: 2024-10-13 07:34:09

005_常见的502错误的相关文章

LNMP中常见的502错误及处理方法

LNMP配置完成以后,经常遇到502 Bad Gateway的错误提示,究其原因多为2种.下面对这两方面的问题进行分析: 1. 配置方面的错误 配置错误中,或者因为php-fpm找不到路径,或者是权限问题. [1]先对路径进行分析: 在Nginx的配置文件中,有这么一段: # vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcg

Nginx常见502错误

1.配置错误 因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port 2.资源耗尽 lnmp架构在处理php时,nginx直接调取后端的php-fpm服务,如果nginx的请求量偏高,我们又没有给php-fpm配置足够的子进程,那么php-fpm就会资源耗尽,一旦资源耗尽nginx找不到php-fpm就会出现502错误, 解决方案 去调整php-fpm.conf中的pm.max_children数值,使其增加

服务器502错误

502错误解决办法总结:       通常错误原因只分两方面:1.环境初始化的时候.2.某次修改代码之后出现502错误       针对问题1,通过查询服务器错误日志.PHP-fpm错误日志.以及其它各种错误日志.根据问题修改服务器配置.PHP.ini配置等方式解决,如上面前5条说明       针对问题2,必然是通过代码排查找寻代码错误,如6.7条记录 1. 2014/08/02 16:14:31 [error] 17029#0: *17941 recv() failed (104: Conn

shell 练习(08)——Nginx 502 错误检查处理

1. 题目 服务器上跑的是 LNMP 环境,近期总是有502现象.502为网站访问的状态码,200正常,502错误是Nginx最普遍常见的错误状态码.由于502错误码只是暂时的,并且只要重启 php-fpm 服务则502消失,但不重启的话,则会一直持续很长一段时间.所以,有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下 php-fpm 服务. 设定: 1) Nginx 的 access_log 在 /data/logs/nginx/access.log 2) 脚本死循环

nginx排查502错误

排查502错误1.查看/usr/local/nginx/conf/nginx.conf从而知道其错误日志在哪.重点查看其错误日志.2.如果是/tmp/dd.sock2017/05/01 18:48:33 [error] 2015#0: *1 access forbidden by rule, client: 192.168.81.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168

nginx 502 错误

今天帮朋友处理一个程序报错,重启nginx服务之后,发现首页打不开了,但是静态文件可以打开 经检查nginx 服务器正常运行,重启无数次仍然502错误,考虑到静态文件可以打开,怀疑可能是php 脚本程序没有正常运行,运势 ps -aux |grep php-fpm 没有相关进程,进一步产看网络链接状态 netstat -anpo |grep 9000 仍没有内容,可以断定是php-fpm问题,启动该进程,我的安装目录在usr/local/nginx/php/php-fpm ./sbin/php-

最常见的HTTP错误

1. HTTP 500错误(内部服务器错误)对对HTTP 500错误的定义已经充分证明了这是一个最常见的HTTP错误. 一般来说,HTTP 500 错误就是web服务器发生内部错误时返回的信息. 例如,web服务器过载时将无法正确处理访问请求.根据Google的搜索数据统计,HTTP 500 错误发生机率是404错误的两倍: 2. HTTP 404错误(文件未找到)大多数人都知道这个错误. 当用户试图访问Web服务器(通常是一个网页)上某个实际不存在的资源时,就会发生404错误. 404错误可能

C语言中常见的内存错误与解决方法

常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策. 类型 1:内存未分配成功,却使用了它. 方   法:在使用之前检查指针是否为NULL. 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查. 2)当使用malloc或new来申请内存时,应该用if(p != NULL)进行防错检查. 类型 2:引用了尚未初始化的指针 原   因:内存的缺省初始值究竟是什么并没有统一的标准,在使用之前都进行初始化. 1)没有初始化的观念. 2

源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题

最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持openssl, 支持curl, 网上找了好多资料, 都没解决. [[email protected] ~]# php -V Failed loading /usr/local/zend/ZendOptimizer.so: /usr/local/zend/ZendOptimizer.so: undefi