nginx502错误和错误日志级别

一、nginx的502错误

    lnmp中错误率相当高的一种,使用curl或者浏览器访问时显示"502 Bad Getway",我总结了三条解决方法,但是可能还有其他原因造成。

    解决方法:

      1.配置错误引起

        因为我们的nginx是通过php的fastcgi进行连接的,所以在nginx的虚机主机配置文件中有一个地方和php的配置文件是必须设置成一样的。在lnmp中有两种监听方式:(1)tcp/ip方式(2)socket方式

        在/usr/local/nginx/conf/vhosts/XX.conf配置中,有一个fastcgi_pass值,这里的值必须要和/usr/local/php/etc/php-fpm.conf里面listen一样。(fastcgi_pass要根据php-fpm.conf的listen监听一样)

       XX.conf配置:

    location ~ \.php$ {
        include fastcgi_params;
      #  fastcgi_pass unix:/tmp/php-fcgi.sock;
        
       fastcgi_pass 127.0.0.1:9000;


    php-fpm.conf配置

error_log = /usr/local/php/var/log/php-fpm.log
[www]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000


   2.用户权限问题

    因为我们的nginx的工作进程的属主属组是nobody

[root@centos-6 logs]# ps aux |grep nginx
root      5128  0.0  0.1  25016  1500 ?        Ss   Nov20   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    7420  0.0  0.3  26848  3528 ?        S    05:42   0:01 nginx: worker process                                          
nobody    7421  0.0  0.4  27196  4164 ?        S    05:42   0:00 nginx: worker process  


     而php-fpm服务进程是php-fpm,两者的属主属组不一样,从而导致nginx的请求不能被php-fpm进程处理。

      需要在php-fpm.conf配置中添加nobody的监听属主属组

error_log = /usr/local/php/var/log/php-fpm.log
[www]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000
listen.owner = nobody
listen.group = nobody

        

   3.资源耗尽导致

     在lnmp架构中,我们的nginx服务是直接调用php-fpm服务的fastcgi,如果nginx的请求量很高时,而我们给php-fpm的子进程(子进程可以在php-fpm.conf中设置)又很少,总有一天php-fpm的资源被耗尽,那么nginx就会找不到php-fpm的子进程。

     这个时候我们需要到php-fpm.conf调整pm_max_chilren(php-fpm最大启动多少个子进程)数值,但是也不能无限制的增加,毕竟服务器资源有限。查询资料后,是4G的服务器,如果只跑nginx服务和php-fpm服务,不跑mysql服务,可以设置150,如果是8G服务器可以设置300,以此类推。

     502错误原因可能还有其他的,不再列举。


#####################################################################################################

    

二、nginx的错误日志级别

   nginx的错误日志路径:/usr/local/nginx/logs/nginx_error.log       (错误日志路径可以在nginx.conf下自定义)

   php的错误日志路径:/usr/local/php/var/log/php-fpm.log              (日志可以在php-fpm.conf下自定义)

  

     nginx的错误日志记录有6个级别:debug, info, notice, warn, error, crit ,默认是crit

     需要在nginx的nginx.conf里面修改

crit 记录的日志最少,而debug记录的日志最多。如果有一些很深的bug,使用crit级别可以无法记录,就需要临时改成更高级别。如 你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。
调整日志级别使用error_log指令 : error_log /your/path/nginx/logs/nginx_error.log crit;
如:error_log /usr/local/nginx/logs/nginx_error.log debug;
debug只能临时改成,看完日志后要改回crit,防止错误日志把磁盘撑满。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值