Nginx php如何解决502 Bad Gateway错误

开发 前端
Nginx php一直为我们的服务器服务着。那我们为什么如何才能更好的进行相关的错误更正,下面我们就详细的看看有关的内容。

在Web服务器中有很多先进的技术,Nginx php就是其中的一个,接下来我们就看看在Nginx 中的相关问题解决,希望大家有所收获。Nginx php中配置php fastcgi组解决莫名其妙的502 Bad Gateway错误

一般Nginx php都采用这样的方式:

  1. location ~ \.php$ {  
  2. proxy_pass http://localhost:9000;  
  3. fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_
    script_name;  
  4. include fastcgi_params;  

这个方式只能连接到一组spawn-fcgi开启的fastcgi,在服务器负载稍高时常常出现502 bad gateway错误。

起先怀疑这是php-cgi的进程开得太少,增加后仍然有反映时常有错,偶然间发现php-cgi会报出这样的错误:

  1. zend_mm_heap corrupted 

看来是php-cgi在执行某些代码时有问题,以致于该线程中止。

在服务器上可能还会看到php-cgi进程在不断变少,估计是出现错误的php-cgi的进程自动退出了。

php的问题总是不太容易能解决,所以在Nginx php方面想想办法,Nginx的好处是它总是能爆出一些稀奇古怪的做法出来。在Nginx的proxy中,规避莫名其妙错误的办法无非是proxy到一个upstream的服务器组中,然后配置proxy_next_upstream,让Nginx遇到某种错误码时,自动跳到下一个后端上。这样,应用服务器即使不稳定,但是在Nginx后面就变成了稳定服务。想到Nginx的fastcgi和proxy是一路东西,所以proxy能用的经验,移植到fastcgi也能跑得起来。照着这个思路,用spawn-fcgi多开同样一组php进程,所不同的仅仅是端口:

  1. spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f php-cgi -C 100  
  2. spawn-fcgi -a 127.0.0.1 -p 9001 -u nobody -f php-cgi -C 100 

然后把fastcgi的这段配置改成用upstream的方式:

  1. upstream backend {  
  2. server 127.0.0.1:9000;  
  3. server 127.0.0.1:9001;  
  4. }  
  5. location ~ \.php$ {  
  6. proxy_pass http://backend;  
  7. fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_
    script_name;  
  8. include fastcgi_params;  

检查配置结果正确,能跑起来;同时在服务器上netstat -n|grep 9000和grep 9001都有记录,证明连接无误;在前台查阅页面,一切运行正常。这个配置是最简单的配置,既然能连接上upstream,那么很显然upstream的一些东西都可以拿来用,比如ip_hash、weight、max_fails等。这样的配置在单机下不知能不能共享session,没有测试,如果有问题,可以加上ip_hash,或者配置php把session存进memcached中。然后就是fastcgi_next_upstream的配置,Nginx wiki中没有介绍到这个配置,查了一下,在Nginx php的CHANGES中有提到,而且出生年月是和proxy_next_upstream一样的。

既然如此,那就照proxy_next_upstream一样配吧。一般按默认的值error timeout就可以工作,因为php出现502错误的异常是返回的500错误,所以我把fastcgi_next_upstream定为:fastcgi_next_upstream error timeout invalid_header http_500;通过这个配置,就可以基本杜绝任何时常性的500错误,出问题的几率会变小很多,如果客户反映仍然激烈,那么就多增加几组fastcgi进程。以上配置能够杜绝由于php所引起的“莫名其妙”的时常性的502错误,同时可使Nginx搭配php比从前方式更为强悍。假如Nginx还是返回502错误,那这次就一定是出现服务器挂掉或其它严重问题的了。

【编辑推荐】

  1. Nginx配置如何解决琐碎标签问题
  2. Nginx负载均衡器如何实现自行共享
  3. Nginx代理服务器中的文件整理系统
  4. Nginx Web服务器标准IP解决方案
  5. Nginx异步代理四步解决相关问题
责任编辑:张浩 来源: 互联网
相关推荐

2018-06-14 09:00:00

WordPress浏览器Web服务器

2010-03-29 17:46:39

Nginx asp

2010-03-26 18:41:51

Nginx 502错误

2014-06-11 09:34:22

vSphere虚拟机

2010-11-17 09:48:07

Nginx 502错误

2010-03-24 09:25:36

Nginx配置

2017-08-02 15:51:24

PHP中文乱码

2009-12-11 13:33:14

PHP无法修改head

2017-04-07 08:43:46

数据分析错误解决

2019-02-25 11:16:29

Windows 10错误distributed

2011-05-23 09:51:30

MySQL

2018-09-20 11:04:02

NginxPHP-FPM502

2010-10-08 11:41:38

PHP连接MYSQL

2011-12-05 13:09:08

2012-09-05 11:09:15

SELinux操作系统

2019-06-12 10:15:17

Windows 10 错误系统配置信息

2017-11-09 10:42:11

Nginx负载均衡策略

2013-10-30 17:34:51

Nginx服务器软中断XEN虚拟

2019-02-21 10:35:44

Windows10远程过程调用错误

2015-07-14 10:54:50

PHP数据循环内存耗尽
点赞
收藏

51CTO技术栈公众号