`

nginx的50X错误与php-fpm配置的优化

 
阅读更多

情况:高并发下,请求a所在的php-fpm进程顺利访问到资源,但是还没有执行完毕,请求b一直没能获得可用的php-fpm进程,此时请求b就会被返回504的错误,

如果此时过多的504和其他问题导致整个fpm、nginx出现问题,那么还没有执行完毕的php-fpm进程所在的请求a就会出现502错误(因为进程被终止了)

 

Nginx 502 Bad Gateway的含义是请求的PHP-CGI(这里使用的是php-fpm)已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止(执行中php-fpm进程挂掉了的意思)。

一般Nginx 502 Bad Gateway和php-fpm.conf和php-fpm.conf的设置有关,例如:

1.FastCGI进程是否已经启动

 

2.FastCGI worker进程数是否不够

 

3.FastCGI执行时间过长

  fastcgi_connect_timeout 300; #连接时间

  fastcgi_send_timeout 300;    #发送时间 

  fastcgi_read_timeout 300;    #读取时间

 

4.FastCGI Buffer不够

  fastcgi_buffer_size 32k;

  fastcgi_buffers 8 32k;

 

5.Proxy Buffer不够(如果你用了Proxying)

 

6.https转发配置错误

 

7.php脚本执行时间过长(request_terminate_timeout选项值)

 

 

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI(等很久了还是没有可用的php-cgi进程了的意思)。

一般Nginx 504 Gateway Time-out则是与nginx.conf和php-fpm.conf的设置有关

1.FastCGI执行时间过长:(该选项也会导致502错误,选项是在nginx.conf的http、server、location域中设置,单位为秒

  fastcgi_connect_timeout 300; #连接时间

  fastcgi_send_timeout 300;    #发送时间 

  fastcgi_read_timeout 300;    #读取时间

 

 

Nginx 413错误的排查:修改上传文件大小限制

在上传时nginx返回了413错误,查看log文件,显示的错误信息是:”413 Request Entity Too Large”, 于是在网上找了下“nginx 413错误”发现需要做以下设置:

在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制;

如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。

post_max_size = 8M

upload_max_filesize = 2M

 

 

Nginx 400错误排查:HTTP头/Cookie过大

今天有人汇报nginx的HTTP400错误,而且这个HTTP400错误并不是每次都会出现的,查了一下发现nginx400错误是由于request header过大,通常是由于cookie中写入了较长的字符串所引起的。

解决方法是不要在cookie里记录过多数据,如果实在需要的话可以考虑调整在nginx.conf中的client_header_buffer_size(默认1k)

若cookie太大,可能还需要调整large_client_header_buffers(默认4k),该参数说明如下:

请求行如果超过buffer,就会报HTTP 414错误(URI Too Long)

nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

 

 

 

php-fpm的一些可优化的配置项:

 

pm = dynamic         #对于专用(线上)服务器,pm可以设置为static。#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:

pm.max_children      #子进程最大数

pm.start_servers     #启动时的进程数

pm.min_spare_servers #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

pm.max_spare_servers #保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

 

ps:其中max_children的值,原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。设置”max_children”也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存1Gb。而如果我的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

 

 

pm.max_requests = 1000

#设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

ps:一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。正是因为这个机制,在高并发的站点中,经常导致 502 错误(因为同一个进程达到了重启的访问值后,会被强制重启,而正在使用该进程的访问们就会由于该进程的被终止而返回502错误)

 

 

request_terminate_timeout = 0 #设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

ps:如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将”request_terminate_timeout”设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

 

 

 

 

 

分享到:
评论

相关推荐

    Opcache导致php-fpm崩溃nginx返回502

    在互联网技术领域中,PHP是一种广泛使用的服务器端脚本语言,而Nginx是一个高...通过上述步骤,可以有效解决由Opcache配置不当或扩展冲突导致的php-fpm崩溃和nginx返回502错误的问题,从而提高PHP应用的性能和稳定性。

    Nginx与PHP(FastCGI)的安装、配置与优化

    ### Nginx与PHP(FastCGI)的安装、配置与优化 #### 一、引言 在现代Web开发环境中,Nginx作为一款高性能的HTTP服务器和反向代理服务器,广泛应用于各种规模的网站中。它以其稳定性、丰富的功能集、简单的配置文件和...

    php-5.2.6 fpm配套包

    2. **FPM配置文件**:FPM的配置文件通常位于`/etc/php-fpm.conf`或`/etc/php/5.2/fpm/pool.d/www.conf`。这个文件包含了各种参数,如监听地址、端口、进程池设置、日志位置等。根据实际需求调整这些设置,可以优化...

    Win7配置Nginx + PHP7

    在Windows 7操作系统中配置Nginx与PHP7是一项常见的任务,主要目的是为了搭建一个能够运行PHP应用程序的服务器环境。Nginx是一个高性能的HTTP和反向代理服务器,而PHP7则是一个流行的服务器端脚本语言,常用于开发...

    PHP7+Nginx的配置与安装教程详解

    在本文中,我们将详细讲解如何在Linux环境下,特别是CentOS 6.5 x64系统上,配置和安装PHP7与Nginx服务器。Nginx是一款高性能的HTTP和反向代理服务器,而PHP7则是一款广泛使用的服务器端脚本语言,主要用于Web开发。...

    php运行环境搭建(apache nginx)

    无论是Apache还是Nginx,都需要根据实际需求进行优化,如调整PHP的内存限制、错误报告级别、MySQL的查询缓存等。此外,安全也是重要的一环,如使用HTTPS、限制不必要的端口访问、定期备份数据库等。 总之,搭建PHP...

    Win7 下配置Nginx+PHP7

    在Windows 7操作系统中配置Nginx与PHP7是一个常见的任务,主要应用于本地开发环境的搭建,以便测试和调试PHP应用程序。Nginx是一个高性能的Web服务器,而PHP7则是一个用于服务器端脚本的开源解释器。下面将详细介绍...

    nginx_php_magento配置文件

    配置`nginx`以支持`Magento`涉及多个步骤,包括设置基本的服务器块、指定错误页面、处理静态文件、反向代理到`PHP-FPM`等。以下是一个基础的`nginx`配置示例: ```nginx server { listen 80; server_name example...

    PHP连接Nginx服务器并解析Nginx日志的方法

    PHP与Nginx的结合,尤其是配合PHP-FPM(FastCGI进程管理器),在处理PHP脚本时性能卓越,尤其在高并发环境下。 #### PHP-FPM的作用和优势 PHP-FPM是PHP的一个补丁,用于管理PHP进程的FastCGI进程池。它允许Nginx与...

    Linux源码安装MySQL+MySQL主从+Nginx+Nginx负载均衡+redis+php+phpredis+tomcat

    在本教程中,我们将深入探讨如何在Linux环境中源码安装MySQL、MySQL...在完成安装后,别忘了学习和熟悉各组件的管理与优化,确保系统稳定、高效地运行。此外,提供的MySQL常用命令资料也会对你的数据库管理大有裨益。

    nginx-1.16.1-win-x64.7z

    在本指南中,我们将深入探讨Nginx 1.16.1的Windows x64版本,包括其特点、安装过程、配置以及在Web服务器场景中的应用。 **一、Nginx 1.16.1 版本特性** 1. **稳定性与性能优化**:1.16.1版主要注重稳定性和性能...

    nginx php搭建环境

    本文将详细讲解如何使用nginx(发音为“engine x”)和PHP搭建一个高效的Web服务环境,以满足高并发访问的需求。 nginx是一款轻量级、高性能的Web服务器,以其反向代理、负载均衡和HTTP缓存等功能而广受赞誉。它...

    nginx配置文件-magent

    这里定义了404和50x错误页面的路径。 以上就是关于“nginx配置文件-magent”的详细讲解,希望对你理解Nginx配置和优化Magento环境有所帮助。请根据实际情况调整配置,并确保安全性和性能的平衡。

    PHP5.5.6 服务器用

    根据你使用的Web服务器(如Apache或Nginx),配置FastCGI模块来与PHP-FPM通信。对于Apache,可以使用mod_fcgid或mod_proxy_fcgi模块;对于Nginx,配置`fastcgi_pass`指令。 7. **测试PHP安装** 创建一个名为`info...

    php软件以及安装配置

    5. 重启Nginx和PHP-FPM服务:完成配置后,重启服务以应用更改。 五、PHP的配置选项 在php.ini文件中,你可以找到大量可配置的选项。例如: - date.timezone:设置默认时区,如"Asia/Shanghai"。 - memory_limit:...

    安装lnmp中的PHP的包

    8. 配置Nginx以使用PHP-FPM: 修改 `/etc/nginx/sites-available/default` 或相应的站点配置文件,添加如下内容: ``` location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/...

    Nginx教程从入门到精通到失业

    - **配置 PHP-FPM**:配置 PHP-FPM 以便 Nginx 能够处理 PHP 请求。 - **访问测试**:完成配置后,通过访问 PHP 页面来验证配置是否成功。 #### 三、配置虚拟主机 - **准备站点**:为不同的域名准备相应的文档根...

    开源电子书:Nginx 开发手册文档.pdf

    3. PHP-FPM 安装配置:可以使用 PHP-FPM 作为 FastCGI server,提供 PHP支持。 Nginx 的一些常见问题和解决方案: 1. Nginx 安装问题:可以检查安装日志,查看安装过程中的错误信息。 2. Nginx 配置问题:可以检查...

    php5.6_centos.tar.gz

    《PHP 5.6在CentOS系统中的安装与配置详解》 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。PHP 5.6是该系列的一个重要版本,提供了许多增强功能和优化,提高了性能和...

    mysql5.5+php+nginx脚本自动化部署

    5. **PHP-FPM集成**:将PHP与Nginx整合,通过FastCGI进程管理器(PHP-FPM)实现PHP处理。配置Nginx以转发PHP请求到PHP-FPM服务。 6. **测试与验证**:启动所有服务,确保MySQL、PHP和Nginx能正常工作。可以通过访问...

Global site tag (gtag.js) - Google Analytics