cxin 发表于 2018-11-12 11:47:25

nginx常见502问题的解决

  nginx常见502问题的解决
  常见502 Bad Gateway出现的原因大致分为两种:
  (1)配置错误,nginx的配置路径:/data/www路径错了会报错502
  # pwd
  /usr/local/nginx/conf/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_pass127.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.conf111.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左右比较合适。
  实例:
  # cd /usr/local/nginx/conf/vhosts/
  # ls
  111.confdefault.conf
  # mv 111.conf test.conf
  # 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_pass127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
  }
  }
  检查配置文件:
  # /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
  重新加载,两种方法都可以:

  # /usr/local/nginx/sbin/nginx -s>
  # /etc/init.d/nginx>  重新载入 Nginx:                                           [确定]
  在浏览器中访问:www.test.com 报错502.
  # cat /usr/local/nginx/logs/nginx_error.log
  2016/01/07 11:48:19 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"    //发现没有权限
  # ls -l /tmp/www.sock
  srw-rw---- 1 root root 0 1月   6 20:41 /tmp/www.sock
  # ps aux | grep nginx
  root      50580.00.0   52201428 ?      Ss   18:49   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  nobody58110.00.1   64722416 ?   S    20:58   0:00 nginx: worker process
  nobody58120.00.1   64722236 ?   S    20:58   0:00 nginx: worker process
  root    58600.00.0   6052   796 pts/0   S+   21:04   0:00 grep nginx
  解决方法:在www池中添加监听用户和用户组
  # vim /usr/local/php/etc/php-fpm.conf
  listen.owner= nobody
  listen.group = nobody
  # /etc/init.d/php-fpm restart
  Gracefully shutting down php-fpm . done
  Starting php-fpmdone
  主机hosts 192.168.101.230 www.test.com
  在浏览器中可以正常访问。

页: [1]
查看完整版本: nginx常见502问题的解决