nginx常见502问题的解决

常见502 Bad Gateway出现的原因大致分为两种

(1)配置错误,nginx的配置路径:/data/www路径错了会报错502

[root@daixuan vhosts]# pwd

/usr/local/nginx/conf/vhosts

[root@daixuan vhosts]# vim test.conf

server

{

    listen 80;

    server_name wwww.test.com;

    index index.html index.htm index.php;

    root /data/www;

    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/www.sock;

        #fastcgi_pass  127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

    }


注意:不同的域名对应不同的虚拟主机配置文件,如果下面两个配置文件都写同一个域名www.test.com,则按照default.conf解析为准,如果default里有deny all,报错403 Forbidden,无法访问。

default.conf  111.com //这里不能写www.test.com,否则会导致访问www.test.com报错403 Forbidden

test.conf    www.test.com 


(2)资源耗尽

LNMP架构处理php时,是nginx直接调用后台的php-fpm服务,如果nginx的请求量偏高,而我们又没有给php-fpm配置足够的子进程,那么总有php-fpm资源耗尽的时候,一旦nginx找不到php-fpm,此时就会导致502错误。解决方法是调整php-fpm.conf中的pm.max.childen数值,不是无限量设置的,4G设置150,8G可以设置为300左右比较合适。


实例:

[root@daixuan vhosts]# cd /usr/local/nginx/conf/vhosts/

[root@daixuan vhosts]# ls

111.conf  default.conf

[root@daixuan vhosts]# mv 111.conf test.conf

[root@daixuan vhosts]# vim !$

vim test.conf

红色为修改内容:

server

{

    listen 80;

    server_name wwww.test.com;

    index index.html index.htm index.php;

    root /data/www;


    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/www.sock;

        #fastcgi_pass  127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

    }

}

检查配置文件:

[root@daixuan vhosts]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加载,两种方法都可以:

[root@daixuan vhosts]# /usr/local/nginx/sbin/nginx -s reload

[root@daixuan vhosts]# /etc/init.d/nginx reload

重新载入 Nginx:                                           [确定]

在浏览器中访问:www.test.com 报错502.


[root@daixuan vhosts]# cat /usr/local/nginx/logs/nginx_error.log

2016/01/07 11:48:19 [crit] 7622#0: *6 connect() to unix:/tmp/www.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: www.test.com, request: "GET http://www.test.com/ HTTP/1.1", upstream: "fastcgi://unix:/tmp/www.sock:", host: "www.test.com"    //发现没有权限

[root@daixuan vhosts]# ls -l /tmp/www.sock

srw-rw---- 1 root root 0 1月   6 20:41 /tmp/www.sock

[root@daixuan vhosts]# ps aux | grep nginx

root      5058  0.0  0.0   5220  1428 ?        Ss   18:49   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nobody  5811  0.0  0.1   6472  2416 ?   S    20:58   0:00 nginx: worker process

nobody  5812  0.0  0.1   6472  2236 ?   S    20:58   0:00 nginx: worker process

root    5860  0.0  0.0   6052   796 pts/0   S+   21:04   0:00 grep nginx


解决方法:在www池中添加监听用户和用户组

[root@daixuan vhosts]# vim /usr/local/php/etc/php-fpm.conf

listen.owner= nobody

listen.group = nobody

[root@daixuan vhosts]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done


主机hosts 192.168.101.230 www.test.com

在浏览器中可以正常访问。