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配置并兼容HTTP实现代码解析
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
如何通过cmd 连接阿里云服务器
Apr 18 Servers
Windows Server 2012配置DNS服务器的方法
Apr 29 Servers
设置IIS Express并发数
Jul 07 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
Nginx如何配置根据路径转发详解
Jul 23 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 header函数分析详解
2011/08/06 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python二分查找详解
2015/09/13 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
深入了解python列表(LIST)
2020/06/08 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
感恩母亲节活动方案
2014/03/04 职场文书
公司放假通知范文
2015/04/14 职场文书
婚姻出轨保证书
2015/05/08 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL