一、nginx的502错误
lnmp中错误率相当高的一种,使用curl或者浏览器访问时显示"502 Bad Getway",我总结了三条解决方法,但是可能还有其他原因造成。
解决方法:
1.配置错误引起
因为我们的nginx是通过php的fastcgi进行连接的,所以在nginx的虚机主机配置文件中有一个地方和php的配置文件是必须设置成一样的。在lnmp中有两种监听方式:(1)tcp/ip方式(2)socket方式
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,防止错误日志把磁盘撑满。