nginx加php-fpm出现502badgateway错误的5种解决方法
nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给了客户端502错误。
服务器出现502的原因是连接超时我们向服务器发送请求由于服务器当前链接太多,导致服务器方面无法给于正常的响应,产生此类报错
因此如果你服务器并发量非常大,那只能先增加机器,然后按以下方式优化会取得更好效果;但如果你并发不大却出现502,一般都可以归结为配置问题,脚本超时问题。
一、php-fpm进程数不够用
使用netstat-napo|grep"php-fpm"|wc-l查看一下当前fastcgi进程个数,如果个数接近conf里配置的上限,就需要调高进程数。
但也不能无休止调高,可以根据服务器内存情况,可以把php-fpm子进程数调到100或以上,在4G内存的服务器上200就可以。
二、调高调高linux内核打开文件数量
可以使用这些命令(必须是root帐号)
echo"ulimit-HSn65536">>/etc/profile
echo"ulimit-HSn65536">>/etc/rc.local
source/etc/profile
三、脚本执行时间超时
如果脚本因为某种原因长时间等待不返回,导致新来的请求不能得到处理,可以适当调小如下配置。
nginx.conf里面主要是如下
fastcgi_connect_timeout300;
fastcgi_send_timeout300;
fastcgi_read_timeout300;
php-fpm.conf里如要是如下
request_terminate_timeout=10s
四、缓存设置比较小
修改或增加配置到nginx.conf
proxy_buffer_size64k;
proxy_buffers 512k;
proxy_busy_buffers_size128k;
五、recv()failed(104:Connectionresetbypeer)whilereadingresponseheaderfromupstream
可能的原因机房网络丢包或者机房有硬件防火墙禁止访问该域名
但最重要的是程序里要设置好超时,不要使用php-fpm的request_terminate_timeout,
最好设成request_terminate_timeout=0;
因为这个参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104:Connectionresetbypeer。这个过程是很慢,总体感觉就是网站很卡。
May0110:50:58.044162[WARNING][poolwww]child4074,script"/usr/local/nginx/html/quancha/sameip/detail.php"executiontimedout(15.129933sec),terminating
May0110:50:58.045725[WARNING][poolwww]child4074exitedonsignal15SIGTERMafter90.227060secondsfromstart
May0110:50:58.046818[NOTICE][poolwww]child4082started
说一千道一万最重要的就是程序里控制好超时,gethostbyname、curl、file_get_contents等函数的都要设置超时时间。
另一个就是多说,这个东西是增加了网站的交互性,但是使用的多了反应就慢了,如果你网站超时且使用了多说是,可以关闭它。
相关文章
- 【说站】php.ini中屏蔽所有错误的方法
- PHP连接MySQL数据库的步骤与方法(php如何连接mysql)
- PHP使用MySQL数据库:最佳实践(php查询mysql数据库)
- 探索Linux下查看PHP扩展的奥秘(linux查看php扩展)
- 如何在Linux中配置PHP(linux怎么配置php)
- 卸载Linux环境下的PHP:一个指南(linux如何卸载php)
- PHP failed to ptrace(PEEKDATA) pid 13659: Input/output error错误解决方法详解编程语言
- 数据如何使用PHP在MySQL中添加数据(php添加mysql)
- Linux下构建高性能PHP环境(linux下的php)
- 程序快速学会在Linux中执行PHP程序(linux执行php)
- 轻松实现PHP操控MySQL语句(php执行mysql语句)
- 使用PHP操作Redis:简单灵活的方法(php如何使用redis)
- PHP与MySQL的完美搭配,打造高效列表展示(php与mysql列表)
- 轻松实现高效数据调用:PHP如何与Redis集成(php调用redis)
- 数据库解决PHP连接远程MySQL数据库的问题(php连接远程mysql)
- Linux下PHP的安装与配置(linux安装配置php)
- PHP无法连接MSSQL数据库问题的解决方法(php 无法 mssql)
- PHP管理MSSQL的方法探索(Php管理mssql)
- 在Linux环境下,使用PHP发送邮件(linux发送邮件php)
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- php入门学习知识点三PHP上传
- PHP第一节php简介
- PHP下打开phpMyAdmin出现403错误的问题解决方法
- PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
- PHP编译安装中遇到的两个错误和解决方法
- PHP错误Warning:Cannotmodifyheaderinformation-headersalreadysentby解决方法