Nginx 502 Bad Gateway错误原因及解决方案


Posted in Servers onMarch 31, 2021

Nginx 502 Bad Gateway 的错误已经遇到好几次了,这里做一下记录,备忘哈哈。

Nginx 502 Bad Gateway错误原因及解决方案

会有好多种情况出现502错误,下面我们分情况来说一下。

一、fastcgi缓冲区设置过小

出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误。

2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream

查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。

网上查找了一下解决方法,在国外网站看到了一个增加缓冲区的方法,彻底解决了Nginx 502 Bad Gateway的问题。方法如下:

http {
  ...
  fastcgi_buffers 8 16k;
  fastcgi_buffer_size 32k;
  ...
}

请根据服务器已经网站的情况自行增大上述两个配置项。

二、代理缓冲区设置过小

如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。

server {
    listen    80;
    server_name *.lxy.me;
    location / {
###############添加这3行
        proxy_buffer_size 64k;
       proxy_buffers  32 32k;
       proxy_busy_buffers_size 128k;
###############添加这3行
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP    $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
............
}

三、默认php-cgi的进程数设置过少

在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。也有可能是max_requests值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。

四、php执行超时

php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300

五、nginx等待时间超时

部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间

http {
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 .....
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Nginx配置SSL证书出错解决方案
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Nginx解决403 forbidden的完整步骤
Apr 01 Servers
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
May 26 Servers
nginx配置文件使用环境变量的操作方法
Jun 02 Servers
nginx常用配置conf的示例代码详解
Mar 21 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
apache ftpserver搭建ftp服务器
May 20 Servers
CentOS7环境下MySQL8常用命令小结
Jun 10 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
Aug 05 Servers
Nginx访问日志及错误日志参数说明
Mar 31 #Servers
nginx对http请求处理的各个阶段详析
Mar 31 #Servers
Nginx服务器添加Systemd自定义服务过程解析
Mar 31 #Servers
nginx处理http请求实现过程解析
Mar 31 #Servers
Nginx服务器添加Systemd自定义服务过程解析
Mar 31 #Servers
nginx处理http请求实现过程解析
Mar 31 #Servers
Nginx开启Brotli压缩算法实现过程详解
You might like
php中的boolean(布尔)类型详解
2013/10/28 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
javascript调试说明
2010/06/07 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang