Nginx 502 Bad Gateway 的错误的解决方案

Nginx 502 Bad Gateway 的错误的解决方案我用的是nginx反向代理Apache,直接用Apache不会有任何问题,加上nginx就会有部分ajax请求502的错误,下面是我收集到的解决方案。一、fastcgi缓冲区设置过小出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误2013/01/1713:33:47[error]15421#0:*16upstr…

大家好,又见面了,我是你们的朋友全栈君。

我用的是nginx反向代理Apache,直接用Apache不会有任何问题,加上nginx就会有部分ajax请求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 shop.xxx.com;  
     proxy_set_header Host $host:$server_port;    
    proxy_set_header X-Real-Ip $remote_addr;    
    proxy_set_header X-Forwarded-For $remote_addr;   
   
    location / {  
	#这三行 start
	proxy_buffer_size 64k;
	proxy_buffers   32 32k;
	proxy_busy_buffers_size 128k;
	#这三行 end
        proxy_set_header Host $host:$server_port;    
        proxy_set_header X-Real-Ip $remote_addr;    
        proxy_set_header X-Forwarded-For $remote_addr;   
        proxy_pass http://127.0.0.1:82;  
          
    }  
      
}  

三、默认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;
  ......
  }

六、被代理的服务无法响应或者已停止

如下配置,如果http://192.168.16.129:80服务无法响应或者已停止也会报502

 location / {

 
            proxy_set_header Host $host;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://192.168.16.129:80;
        }

希望我收集的能给大家一些帮助

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148691.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • openGL ES美颜滤镜之美白,磨皮,红润[通俗易懂]

    openGL ES美颜滤镜之美白,磨皮,红润[通俗易懂]下面是滤镜源码:importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.opengl.GLES20;importandroid.opengl.GLSurfaceView;importandroid.opengl.Matrix;importandroid.view.WindowManager;importcom.ws.gl.o

    2022年7月22日
    10
  • 矿机和普通电脑区别_计算机挖矿是什么意思

    矿机和普通电脑区别_计算机挖矿是什么意思原标题:处理的挖矿机能当家用电脑用吗?现在购买划算吗?目前市场上的矿机主要分为两类,一类是PC架构的矿机,另一类是基于ASIC芯片的专业矿机。一般PC架构的矿机可以当做家用电脑用,但cpu性能较弱,功耗较高。基于ASIC芯片的专业矿机由于没有显卡,不支持主流的桌面操作系统,,所以无法当普通电脑使用。基于PC架构的矿机可以作为普通电脑使用,但cpu性能较弱,功耗较高!一般基于pc架构的矿机,cpu…

    2022年9月29日
    2
  • 树莓派基于QT实现利用USB转485模块进行串口通讯「建议收藏」

    树莓派基于QT实现利用USB转485模块进行串口通讯「建议收藏」本文的QT版本为5.3.2,是树莓派可直接下载安装的QT版本,不用自己编译。树莓派为3B+。树莓派利用自带的硬件串口是3.3V的ttl电平,在做测试的时候会遇到很多485的设备,在使用232转485的模块遇到了一些乱码问题,所以准备直接利用USB转485模块插在树莓派的USB口上进行通讯。不过这个版本的QT没有Qserialport模块,需要安装,通过命令安装sudoapt-getinstal…

    2022年5月3日
    72
  • 阿里云ddns过程记录

    阿里云ddns过程记录申请了阿里云一年的动态域名,收费的,闲置了几个月,用openwrt一直没成功,最近研究asterisk部署,有个公网的ddns还是方便不少,所以把闲置的域名得拾起来了,过程如下1.开启阿里云后台权限(在访问控制菜单中,文章最后有链接)AliyunDNSReadOnlyAccessAliyunDNSFullAccess2.下载脚本运行GitHub-risfeng/aliyun-ddns-shell:阿里云域名解析动态更新IPShell脚本阿里云域名解析动态更新IPSh

    2022年6月6日
    30
  • QXDM打印高通sensor 日志问题总结

    QXDM打印高通sensor 日志问题总结在使用QXDM打印高通sensor日志的时候,经常会发现有些赋予已经权限很高的log居然打印不出来,这就个代码的追踪带来了一系列困难,鉴于此,我研究了一下高通中log打印问题,给大家今后的使用带来一些经验。在高通的关于日志的头文件定义中,许多日志是默认不打开的,研究代码:#if(BUILD_DRAGON_BOARD)&&(DEBUG_DATA)#defineLSM6DSM_DATA_M

    2022年9月29日
    2
  • spring boot拦截器和过滤器_java拦截器的作用

    spring boot拦截器和过滤器_java拦截器的作用SpringMVC中有两种很普遍的AOP实现:1.过滤器(Filter)2.拦截器(Interceptor)首先说一下两者之间的区别:过滤器和拦截器非常相似,但是它们有很大的区别a.最简单明了的区别就是过滤器可以修改request,而拦截器不能b.过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境c.拦截器可以调用IOC容器中的各种依赖,而过滤器不能d.过滤器只能在请求的前后使用,而拦截器可以详细到每个方法一、HandlerInterc

    2022年8月23日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号