504gateway time-out怎么解决

504gateway time-out怎么解决

扫码添加渲大师小管家,免费领取渲染插件、素材、模型、教程合集大礼包!

大家好,今天来介绍504gateway time-out怎么解决(如何解决504 gateway time-out)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!

"504 Gateway Timeout"是怎么回事

我公司产线上的系统今天也遇到这个氏中问题,前面弯瞎也是从网络和nginx的配置方向去想的,都歼闹山没解决问题,后来运维的同事跟我说数据库锁表了,后面验证确实是

如何解决“504 Gateway Timeout”错误

我们在访问大流量网站或者运营有较多数据的网站时候,偶尔会出现504 Gateway Time-out错误,这多是网站服务器配置不当导致的,下面分享一下504GatewayTime-out错误的解决方法。

  • 01

    代码释义
    504 Gateway Time-out就是字面意思,可以理解为网页请求超时,也就是浏览网站网页所发出的请求没有反应或者未响应,在网站程序层面来说,就是请求未能够执行相应的PHP-CGI程序,或者PHP-CGI程序未能做出相应信闹首的处理,又或者是CGI程序的弯手响应处理结果未能够反馈到浏览器或者未能及时反馈到浏览器。

  • 02

    报错背景
    504 Gateway Time-out错误多是存在于Nginx网站服务器环境下,多与nginx.conf与php-fpm.conf设置是否正确合理有关。解决方法就是根据网站服务器性能及网站流量等诸多因素整合考虑,正确合理的设置niginx.conf和php-fpm.conf配置。

  • 03

    解决方法
    进行正确合理nginx.conf配置,我们需要首先了解和清楚我们网站服务器的配置性能,包括CPU、内存等,并对网站服务器进行必要的性能测试(可参考:vps主机性能测试方法详解),从而准确的掌握网站服务器自身性能状况;

  • 04

    其次,是通过网站统计代码的添加,分析一段时间内网站流量状况,比如:CNZZ站长统计等,掌握网站日流量滑数及PHP-CGI请求的大概情况;

  • 05

    最后,根据我们掌握的服务器性能状况及网络流量情况,合理的对nginx.conf中的下列字句进行合理正确的设置。 
    fastcgi_connect_timeout300s;
    fastcgi_send_timeout300s;
    fastcgi_read_timeout300s; 
    fastcgi_buffer_size128k;
    fastcgi_buffers8128k;#8128 
    fastcgi_busy_buffers_size256k;
    fastcgi_temp_file_write_size256k;
    fastcgi_intercept_errorson;

  • 06

    还有就是php-fpm.conf中max_children与request_terminate_timeout两个重要参数的设置。这两个参数的设置需要我们根据PHP程序情况及服务器带宽状况综合考虑并计算出合理准确的值,才能够避免504 Gateway Time-out或者其他CGI无响应错误的出现。

解决504 Gateway TimeoutThe server didn't respond in time

解决504 Gateway Time-outThe server didn't respond in time的方法步骤如下:

1、首先我们可以选择重启电脑,然后快速按F8按键,选择最后一次正确的配置。

2、上一步完成之后,选择安全模式,按回车进入。

3、然后就会弹出出现如下对话框,点击是。

4、回到桌面之后,点击开始中的所有程序,打开电脑控制面板。

5、在打开控制面板之后,单击添加或删除程明禅序。

6、选肢槐键择要删除程序,出现历巧以下对话框单击卸载就完成操作了。

如何解决“504 Gateway Timeout”错误

情况一:由于nginx默认的fastcgi进圆尘程响应缓冲区太小造成
这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。
2
情况一解决办法:
默认的fastcgi进程响应的缓冲区是8K,我们可以设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k
这表示设置fastcgi缓冲区为8块128k大小的空间。
3
情况一解决办法(改进):
在上述方法修改后,如果还是出现问题,我们可以继续修改nginx的超时参数,将参数调大一点,如设置为60秒:
send_timeout 60;
经过这两个参数的调整,结果没有再提示“504 Gateway Time-out”错误,说明橘举禅效果还是挺不错的,问题基本解决。
4
情况二:PHP环境的配置问题
这里答冲我们需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。
5
情况二解决办法( php-fpm配置修改):
将max_children由之前的10改为30,这样操作是为了保证有充足的php-cgi进程可以被使用。
将request_terminate_timeout由之前的0秒改成60秒,这样使php-cgi进程处理脚本的超时时间提高到60秒,可以防止进程被挂起以提高利用效率。
6
情况二解决办法(nginx配置修改):
为了减少fastcgi的请求次数,尽量维持buffers不变,我们要更改nginx的几个配置项,如下:
将fastcgi_buffers由4 64k改为2 256k;
将fastcgi_buffer_size 由64k改为128k;
将fastcgi_busy_buffers_size由128k改为256k;
将fastcgi_temp_file_write_size由128k改成256k。
7
情况二解决办法修改完,我们需要重新加载php-fpm和nginx的配置,然后再进行测试。之后就没有发现“504 Gateway Time-out”错误,效果也还是不错的!

网页出现“504 Gateway Timeout”没有其它信息是什么原因

对于一个Web开发者来说,504和502问题看上去好像很简单,每个人也可能都遇到过,但把问题说清楚并不那么容易

两台设备只态毁明要通过proxy或fastcgi协议互相通信,都会遇到504问题,比如Nginx+PHP-FPM会遇到;代理服务器连接后端Web服务也会遇到。本次遇到的场景属于后者,重点讲解代理导致的504问题。

那到底上面是504错余孙误呢,看下wiki的引用:

4GatewayTimeout

The server was acting as a gateway or proxy and did not receive a timely response from the upstream server

意思就是一个网关或代理服务器能够连接后端服务器,但在读取服务器响应的时候超时了。遇到504问题一般是后端服务的问题,比如:

后端进程无故退出了(可能是代码异常,也可能是apache或nginx进程异常),导致代理服务器接收不到后端响应。

后端响应缓慢,导致代理服务器接收后端响应超时了。

服务器出现504 Gateway Time-out的解决方法!

按照上述帆告可能的两个情况,逐一分析。

(1)x.php程序在特定的情况下,确实运行缓慢,但apache得access log在25秒左右的时候成功记录了200访问日志(由于php代码执行结束后才记录日志,一开始可能看不到access日志,导致开始误认为是后端程序的问题)。

(2)在x.php程序中记录应用日志,应用日志和access log日志一样,没有任何异常。

这说明代码并没有问题(但程序执行时间过长,有优化的空间),虽然在20秒产生504错误(由nginx处理),后端代码进程仍然继续运行,并在25秒成功运行。

排除这个问题后,最有可能是代理服务器觉得后端响应过于缓慢,主动关闭了该连接,是不是代理服务器设置的超时时间过短?由于公司的代理服务器(ssl nginx)是由专人维护的,看不到具体的配置,邮件询问了同事,得到回复如下:

proxy_read_timeout 60

proxy_send_timeout 60

首先看下 proxy_read_timeout 的介绍:

Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.

最后将该值修改为:

proxy_read_timeout 300

proxy_send_timeout 300

问题最终解决了,肯定是proxy读取超时了,但具体的配置仍然疑惑。

进一步测试

可以进一步了解nginx的proxy配置,如果没有特殊的需求,配置非常简单。

server {

listen 443 ssl;

server_name www.simplehttps.com;

location / {

access_log access.log main;

error_log error.log;

proxy_pass http://127.0.0.1:8080;

proxy_read_timeout 5;

}

}

proxy_pass 可以是一个host、内部域名、ip地址,不用是一个对外的域名。

如果遇到超时问题,观察error.log日志,会看到以下错误:

2018/09/19 21:01:19 [error] 17034#0: *253 upstream timed out (110: Connection timed out) while reading response header from upstream, client: *.*.*.*, server: www.simplehttps.com, request: "GET /x.php HTTP/1.1", upstream: "http://*.*.*.*:8080/x.php", host: "www.simplehttps.com"

最后经过不断调整nginx的proxy_read_timeout指令和后端x.php程序的执行时间,也没有遇到工作中遇到的问题(20秒和60秒之间不对称的问题),只能后续继续留意了。

总结

1:网关和后端的超时时间(proxy或fastcgi)必须协调一致,在本案例中,apache/mod_php运行最长时间如果是30秒,那么nginx设置的超时时间必须大于30秒,因为必须考虑网络传输延时时间(非网络包总传输时间);而如果是nginx+php-fpm模式,nginx设置的超时时间相对简单,因为大部分情况下,nginx和php-fpm部署在同一台机器上,网络延时相对较短,但必须考虑php最大执行时间和php-fpm最大执行时间,

2:针对504错误,可认为都是http错误码,都是服务器端的错误(相对于客户端),在遇到相关错误的时候,必须根据错误码判断可能存在的问题,然后再针对性的排查,否则排查时间会增加很多。

分享到 :
相关推荐

云服务器哪家更稳定(有哪些云服务器比较好的)

大家好,今天来介绍云服务器哪家更稳定(国内云服务器哪家好?怎么选择)的问题,以下是渲...

便宜的服务器是坑吗(现在服务器有便宜的吗)

很多新人站张在初入门时会选择一些便宜服务器。这些便宜服务器好不好呢?首先其价格太便宜...

网站空间购买费用为什么不同(网站空间购买费用为什么不同呢)

网站空间购买费用不同的原因有:1。地区不同。不同地区的网站空间购买价格不同;2。带宽...

国内云主机有哪些优势(云主机的优势)

国内云主机的优势有:1。配置简单。使用方便。无需担心服务器安装。维护或物理服务器所有...

发表评论

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