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
在浏览器中可以正常访问。