Nginx 出现 504 Gateway Time-out 和 502 Bad Gateway 的解决办法

本文介绍了Nginx中504 Gateway Time-out和502 Bad Gateway错误的原因及解决方法,包括调整PHP-FPM配置、增加FastCGI进程数、修改缓冲区容量等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期在调试代码的时候,nginx相继出现了504 Gateway Time-out 和 502 Bad Gateway 的错误。

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的php-cgi。引起这样的问题大多数情况主要是提交给php-fpm的请求未能正确反馈而导致。
Nginx 502 Bad Gateway的含义是请求的php-cgi已经执行,但是由于某种原因没有执行完毕而导致php-cgi进程终止。php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

1. 在解决问题之前先让我们了解几个重要的参数:

(1)nginx.conf文件
  fastcgi_connect_timeout 300s;
  fastcgi_send_timeout 300s;
  fastcgi_read_timeout 300s;
  fastcgi_buffer_size 128k;
  fastcgi_buffers 8 128k;    # 表示设置fastcgi缓冲区为8×128k
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;
  fastcgi_intercept_errors on;
(2)php-fpm.conf文件
1)根据服务器的性能尽量将max_children调大,这样就可以保证有充足的php-cgi进程可以被使用;一般来说每一个php-cgi所耗费的内存在20M左右,如果max_children=50,20M*50=1000M也就是说在峰值的时候所有PHP-CGI所耗内存在1000M以内。
2)request_terminate_timeout设置php-cgi进程处理脚本的超时时间,默认值是0s,含义是让php-cgi一直执行下去而没有时间限制。可根据你的需求和服务器的性能修改这个值,可以防止进程都被挂起,提高利用效率。


2. 解决办法

(1)查看当前的PHP FastCGI进程数是否够用 
netstat -anpo | grep "php-cgi" | wc -l 
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大,将max_children调大。
(2)查看修改缓冲区容量大小 
缓冲区容量过小可能会导致fastcgi进程被挂起,往往nginx默认的缓冲区容量过小,需要适当调大。
(3)查看request_terminate_timeout
如果”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误。如果正在处理的那几个php-cgi遇到了问题就会出现502 Bad gateway这个错误。

(4)另外,php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一,因此可以将php-fpm的处理方式改成apache模式。

更改之后记得要重启php-fpm和nginx。
Nginx 502 Bad Gateway错误通常是由于Nginx服务器无法从上游服务器接收到有效的响应引起的。出现这个错误可能有以下几种解决方法: 1. 检查上游服务器:502错误可能是由于上游服务器故障引起的。因此,首先要确保上游服务器正常运行,并且能够正确地响应请求。 2. 检查Nginx配置:有时候配置文件中的某些设置可能会导致502错误。检查Nginx配置文件(通常是nginx.conf)是否正确配置了上游服务器的地址端口,并且代理设置是否正确。 3. 增加缓冲区大小:如果上游服务器响应较慢,Nginx默认的缓冲区大小可能不足以处理大量请求。可以尝试增加proxy_buffersproxy_buffer_size参数的值来扩大缓冲区大小,以提高代理的性能。 4. 调整超时设置:如果上游服务器响应超时,也会导致502错误。可以尝试调整proxy_connect_timeout、proxy_send_timeoutproxy_read_timeout参数的值来增加超时时间。 Nginx 504 Gateway Time-out错误表示上游服务器在规定的时间内未能及时响应请求。解决这个错误的方法包括: 1. 调整超时设置:可以适当增加proxy_connect_timeout、proxy_send_timeoutproxy_read_timeout参数的值来给上游服务器更多的时间来响应请求。 2. 检查上游服务器:确保上游服务器正常运行,并且能够及时响应请求。 3. 检查负载均衡设置:如果Nginx配置了负载均衡,可以尝试调整负载均衡算法或增加上游服务器的数量,以提高整体性能稳定性。 4. 使用缓存:可以使用缓存来减少对上游服务器的请求,通过缓存来提供部分请求的响应。 以上是常见的解决Nginx 502 Bad Gateway504 Gateway Time-out错误的方法,具体解决办法可能因环境问题的具体情况而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值