千家信息网

Nginx出现502和504错误解决方法

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,公司一台测试服务器,最近出现504和502问题:(环境LNMP,php编译安装,Fastcgi模式),问题不难解决,但这里分享一下自己的排查思路和处理问题的方式。504 Gateway Time-ou
千家信息网最后更新 2025年12月02日Nginx出现502和504错误解决方法


公司一台测试服务器,最近出现504和502问题:(环境LNMP,php编译安装,Fastcgi模式),问题不难解决,但这里分享一下自己的排查思路和处理问题的方式。

504 Gateway Time-out,nginx 502 bad gateway


一、分析问题:

Nginx 504 Gateway Time-out的含义是没有请求到可以执行的PHP-CGI。

Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于读取资源的等没有执行完毕而导致PHP-CGI进程终止。

二、排查步骤:

1)查看Nginx是否可以正常解析php文件(解析正常)

2)查看Nginx访问日志和php日志(日志报错,锁定问题)

2.1.1)Nginx相关日志

12failed (104: Connection reset by peer) while reading... timed out (110: Connection timed out) while reading response...

2.1.2)php相关日志

1WARNING: child 25718 exited on signal 15 (SIGTERM) after 21008.883410 seconds from start

3)查看php和nginx相关配置(Fastcgi相关参数)

......

3.1.1)Nginx和Fastcgi常用相关参数:

1234567891011121314151617181920212223242526272829303132333435363738394041fastcgi_connect_timeout 60; #指定连接到后端FastCGI 的超时时间。 fastcgi_send_timeout 60; #向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。 fastcgi_read_timeout 300; #接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间。 fastcgi_buffer_size 4k; #指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。 fastcgi_buffers 8 4k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。 fastcgi_busy_buffers_size 8k; #默认值是fastcgi_buffers 的两倍。 fastcgi_temp_file_write_size 8k; #在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffers 的两倍。 fastcgi_cache TEST #开启FastCGI 缓存并且为其制定一个名称。 fastcgi_cache_valid 200 302 1h;fastcgi_cache_valid 301 1d;fastcgi_cache_valid any 1m; #为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。 fastcgi_cache_min_uses 1; #缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。

3.1.2)查看进程使用情况

1netstat -autpn|grep "php-cgi"|wc -l

3.1.3)查看Nginx和Fastcgi相关配置

1234567fastcgi_connect_timeout 60;fastcgi_send_timeout 60;fastcgi_read_timeout 60;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;

调整时间,根据之前经验300s足够,最主要的设置是前三条:

123fastcgi_connect_timeout 300s;fastcgi_send_timeout 300s;fastcgi_read_timeout 300s;

3.1.4)调php相关参数:

php.ini

1max_execution_time = 60

php-fpm.conf:

12request_terminate_timeout=300s#默认是0

3.1.4.1)上述参数作用

两项都是用来配置PHP脚本的最大执行时间的。当超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。因此Nginx发现与自己通信的连接断掉了,就会返回给客户端502错误。

3.1.4.2)参数具体配置方式:

如果服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将"request_terminate_timeout"设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。

"max_children"也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,可根据自己的配置具体定义。


3.1.5)502和504可能存在的其它问题

3.1.5.1)Nginx的max_fail,fail_timeout问题

3.1.5.2)网络偶然问题

3.1.5.3)参数配置冲突问题(eg:php.ini和php-fpm,Nginx配置Fastcgi指定了相关参数)

1234567location ~ \.php$ { root htdocs; include fastcgi_params; fastcgi_connect_timeout 60; fastcgi_read_timeout 120; fastcgi_send_timeout 120;}

三、总结:

4.1)根据Ninx相关报错可直接根据常见报错锁定目标。

4.2)根据日志,快速锁定原因。日志是排错的法宝,一定要充分利用。

4.3)调参数注意文件的备份,避免误操作。此外要考虑到参数生效优先级的问题。

4.4)问题总结,做好笔记,下次遇到则可快速解决


时间 问题 参数 日志 配置 缓存 文件 服务器 脚本 服务 含义 进程 缓冲 如上 性能 情况 方式 第一部 缓冲区 资源 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 关于促进网络安全的指导意见 数据库字段命名方式 阿里云数据库和自己安装数据库 吐鲁番互联网科技价格 上海游轩互联网科技 南京 嘉定区新能源软件开发销售厂家 大风服务器 服务器主机重装系统 阿里云服务器内网有啥用 广东工程翼网络技术有限公司 鲲鹏服务器是哪家生产的 企业如何进入当地企业数据库 数据库单独提取相同 怎样把项目部署到服务器并跑起来 网络安全技术练习题答案 上海轩和网络技术是哪个软件 域名换服务器以后要备案吗 dns是域名解析服务器吗 长宁区辅助软件开发报价表 源码数据库哪个好 技术交易平台 软件开发 央办网络安全认定标准 济南网络电视时间服务器异常 斑马网络技术估值 软件开发公司测试团队的优势 青浦区正规软件开发哪家好 软件开发可用图片 宿州云聚互联网科技有限公司 上海电商软件开发哪家专业 无线路由改打印服务器
0