NGINX 502 Bad Gateway 用upstream解决方法
location ~ \.php$ {
proxy_pass http://localhost:9000;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
include fastcgi_params;
}
这个方式只能连接到一组spawn-fcgi开启的fastcgi,在服务器负载稍高时常常出现502 bad gateway错误。
起先怀疑这是php-cgi的进程开得太少,增加后仍然有反映时常有错,偶然间发现php-cgi会报出这样的错误:
zend_mm_heap corrupted
看来是php-cgi在执行某些代码时有问题,以致于该线程中止。
在服务器上可能还会看到php-cgi进程在不断变少,估计是出现错误的php-cgi的进程自动退出了。
php的问题总是不太容易能解决,所以在nginx方面想想办法,nginx的好处是它总是能爆出一些稀奇古怪的做法出来。
在nginx的proxy中,规避莫名其妙错误的办法无非是proxy到一个upstream的服务器组中,然后配置 proxy_next_upstream,让nginx遇到某种错误码时,自动跳到下一个后端上。这样,应用服务器即使不稳定,但是在nginx后面就变成了稳定服务。想到nginx的fastcgi和proxy是一路东西,所以proxy能用的经验,移植到fastcgi也能跑得起来。
照着这个思路,用spawn-fcgi多开同样一组php进程,所不同的仅仅是端口:
spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f php-cgi -C 100
spawn-fcgi -a 127.0.0.1 -p 9001 -u nobody -f php-cgi -C 100
然后把fastcgi的这段配置改成用upstream的方式:
upstream backend {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
location ~ \.php$ {
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
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的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错误,那这次就一定是出现服务器挂掉或其它严重问题的了。
转载于:https://blog.51cto.com/liuxin1982/915070
NGINX 502 Bad Gateway 用upstream解决方法相关推荐
- Nginx 出现504 Gateway Time-out的解决方法
Nginx 出现504 Gateway Time-out的解决方法 参考文章: (1)Nginx 出现504 Gateway Time-out的解决方法 (2)https://www.cnblogs. ...
- java nginx 502_Nginx 502 bad gateway问题的解决方法
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止,一般来说Nginx 502 Bad G ...
- nginx php 502 bad gateway,nginx 502 bad gateway问题怎么解决
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止,一般来说Nginx 502 Bad G ...
- Nginx 502 Bad Gateway 错误的原因及解决方法
2019独角兽企业重金招聘Python工程师标准>>> 刚才在调试程序的时候,居然服务器502错误,昨天晚上也发生了,好像我没有做非常规的操作. 然后网上寻找了下答案, 把一些原因及 ...
- 服务器报错nginx 502 Bad Gateway的原因以及解决办法
网站页面出现502badgateway怎么办?今天我们来分析一下原因和解决办法. 一.nginx 502 Bad Gateway出现的原因: nginx出现502多数是属于后端的问题,后期就是PHP的 ...
- Nginx 502 Bad Gateway 的错误的解决方案
我用的是nginx反向代理Apache,直接用Apache不会有任何问题,加上nginx就会有部分ajax请求502的错误,下面是我收集到的解决方案. 一.fastcgi缓冲区设置过小 出现错误,首先 ...
- 常见的Nginx 502 Bad Gateway解决办法
常见的Nginx 502 Bad Gateway解决办法如下: Nginx 502错误情况1: 网站的访问量大,而php-cgi的进程数偏少. 针对这种情况的502错误,只需增加php-cgi的进程数 ...
- 解决nginx 502 bad gateway
nginx 502 bad gateway 可以采取客户端强制刷新的方法,但是真正的解决要么改配置或者放CDN上. 遇到这个问题,首先是有人发现可以加index.html访问,因为我们是线上 ...
- nginx 502 Bad Gateway解决办法
我的解决方式比较小白, 第一次报这个错(nginx 502 Bad Gateway).网上找了一大圈都是PHP什么的,但是好像都不适用. 于是问了之前的一个同事,他说是不是我的tomcat关闭了,我恍 ...
最新文章
- RHEL 5服务篇—修改MySQl数据库root密码的几种方式
- 斯坦福NLP团队发布最新自然语言处理Python库
- csdn上传资源提示“该资源已存在,请重新上传”
- 科技/IT:2019 年 Q3 表现最佳和最差的企业
- [YTU]_2417 C语言习题 字符串长度
- php购物系统论文答辩老师评价,答辩指导教师的评语大全
- java概述、安装、配置环境、运行
- 网络抓包工具 wireshark教程
- bst 删除节点_C ++程序查找具有N个节点的BST数量(加泰罗尼亚编号)
- 【图说word】 宏
- 【AI视野·今日CV 计算机视觉论文速览 第240期】Thu, 4 Nov 2021
- “阿里离职女高管”蹭马云热度遭阿里高管打假:重新定义高管
- WSL配置C/D盘大小写敏感
- git clone 遇到的坑
- 【Gym-100085 K】Kingdom Roadmap【树上构造题】
- Hybrid App
- python第三方库官方文档汇总
- js获取屏幕高度、宽度
- 从“NVIDIA禁令”看如何正确选择NVIDIA GPU卡
- 《壁纸 - 大全精选手机壁纸》EULA条款协议