LNMP : Linux + Nginx + MySQL + PHP

Nginx 出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 PHP-FPM 处理有问题,Nginx 将正确的客户端请求发给了后端的 php-fpm 进程,但是因为 php-fpm 进程的问题导致不能正确解析 php 代码,最终返回给了客户端 502 错误。

Nginx + PHP 出现 502 bad gateway,一般这都不是 Nginx 的问题,而是由于 fastcgi 或者 php 的问题导致的,常见的有以下几种(其实解决问题的最好的方式还是自己去看 nginx 和 fastcgi 的 errorlog ):

1、PHP 的配置文件 php.ini 中的 memory_limit 值设置过小。
      如果有个别 php 程序进程需要占用极大内存时这个必须注意.。

2、PHP 的配置文件 php-fpm.conf 中 max_children 值或者 max_requests 值设置不合理

设置过小会因为没有足够的 cgi进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况。
      一般情况下 max_children 按照内存计算,比如说1G设置64,2G设置为128。这个根据实际情况自行调整。
      另外查看当前的 PHP FastCGI 进程数是否够用的命令为:
            netstat -anpo |grep “php-cgi” | wc -l
      如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

3、查看 Nginx 服务的错误日志
      查看 Nginx 服务的错误日志,发现 pstream sent too big header while reading response headerfrom upstream ,则检查client_head_buffer、fastcgi_buffer_size 是否过小,可设置为32K。

4、php 程序执行时间过长而超时,检查 Nginx 和 fastcgi 中各种timeout设置。
      nginx 中:
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
            keepalive_timeout;

php-fpm 中:
            request_terminate_timeout

php.ini中:
            max_execution_time

5、PHP-FPM 中 max_requests 参数设置问题
      PHP-FPM 有一个参数 max_requests ,该参数指明了每个children最多处理多少个请求后便会被关闭。
      在大量处理请求下,如果该值设置过小会导致 children 频繁的自杀和建立而浪费大量时间,
      若所有的children差不多都在这个时候自杀,则重建前将没有children响应请求,于是出现502。
      可以将该值设置大一些或者是0[无限]。(生产环境不建议设置为 0)

如果你服务器并发量非常大,那只能先增加机器,然后按以下方式优化会取得更好效果;但如果你并发不大却出现502,一般都可以归结为配置问题,脚本超时问题。

访问 LNMP 报 502 Bad Gateway 错误的解决办法的更多相关文章

  1. nginx报502 bad GateWay错误的解决方法

    nginx+php-fpm+mysql的网站,访问nginx的某个页面,报502 GateWay的错误,一般见到此错误,可以判断是php-fpm的问题,而不是nginx的问题.通过监控nginx的错误 ...

  2. 使用xhprof会在nginx下报502 Bad Gateway错误

    使用xhprof会在nginx下报502 Bad Gateway错误 xhprof_enable()xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMO ...

  3. 阿里云SLB出现502 Bad Gateway 错误排查解决方法

    502 Bad Gateway The proxy server received an invalid response from an upstream server. 原本系统是通过一个SLB转 ...

  4. Nginx 502 Bad Gateway 错误的解决方法

    502 bad gateway 的解决方法 通用配置 proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; # ...

  5. 记32位Oracle客户端登录报12560协议适配器错误的解决办法

    国庆买了一台新电脑ThinkPad E431,i5双核CPU,8G内存,硬盘比较坑爹5400转的500G,重点是预装win8的64位简体中文版.大学时买了第一台电脑神舟笔记本,因为神舟电脑便宜,所以没 ...

  6. [大数据技术]Kettle报OPTION SQL_SELECT_LIMIT=DEFAULT错误的解决办法

    百度得到的解决方式都是说mysql通过jdbc链接的时候会进行测试’SET OPTION SQL_SELECT_LIMIT=DEFAULT’,但是5.6以后的版本弃用了set的方式. 我用的MySQL ...

  7. macOS下加载动态库dylib报"code signature invalid"错误的解决办法

    一.现象描述 在macOS上搞开发也有一段时间了,也积攒了一定的经验.然而,今天在替换工程中的一个动态库时还是碰到了一个问题.原来工程中用的是一个静态库,调试时发现有问题就把它替换成了动态库.这本来没 ...

  8. 访问Harbor报502 Bad Gateway

    Harbor启动都是多个容器的,首先查看一下是否有相关容器未启动 docker ps | grep harbor cae340214e57 goharbor/nginx-photon:v1.9.3 & ...

  9. tp5 url 线上访问 在nginx 上 出现404错误,解决办法(1.80nginx 配置 pathInfo)

      对于ThinkPHP的URL访问路劲如:http://域名/index.php/Index/BlogTest/read,原先的Nginx的是不支持的pathinfo路劲的,导致你在thinkPHP ...

随机推荐

  1. 跟着兄弟连系统学习Linux-【day07】

    day07-20200604 p25.vim常用操作 vim需要经常练习,一般用于修改配置文件.

  2. 十分钟快速入门 Python

    本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. ...

  3. C:算术表达式求值

    代码: // fgets2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #includ ...

  4. 使用Hint /*+ full(emp)*/ 将索引全扫描改成全表扫描,看cost差别

    索引全扫描的执行计划: SQL> select max(age) from tb_emp04 emp; 已用时间: 00: 00: 00.01 执行计划 -------------------- ...

  5. [Java]取得当前代码所在函数的函数名

    要取得当前运行代码的函数名,可以用: Thread.currentThread().getStackTrace()[1].getMethodName(); 但是,这行代码有些过长,嵌入业务代码稍显突兀 ...

  6. Spring Boot入门,源码解析

    目录 1.Spring Boot简介 2.微服务 3.Spring Boot HelloWorld 3.1 创建一个Maven工程 3.2 导入依赖Spring Boot相关的依赖 3.3 编写一个主 ...

  7. (.net core环境下)图形验证,人机交互,一个不够我给你两个

    做软件,遇到一些通用性的功能,我想绝大多数同学都是去网上(或自己之前的项目中)搜一段代码出来,贴到项目中,修修改改,完成任务. 但身为一个有追求的软件工程师,怎么能一直忍受这种低级的操作呢?插件化,模 ...

  8. pytest测试框架 -- 简介

    一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...

  9. VS调试出现解决 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题

  10. springboot的文件路径,配置文件

    生成springboot会指定一个包路径,启动的class文件在这个目录下,其他的controller等也要在这个目录的子目录下,不然会扫不到. 一般我们会维护两三个配置文件:生产环境,开发环境,测试 ...