nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > nginx访问返回504

nginx访问返回504问题及解决

作者:liujiangxu

这篇文章主要介绍了nginx访问返回504问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

nginx访问返回504

现象

nginx后端代理为报表服务,错误日志大量出现上游服务超时,页面访问也会出现504返回,查看后发现服务本身没问题,问题着重在nginx本身,报表服务本身属于大查询,返回较慢。

nginx默认本身后端超时为60S,大查询的返回大于60S所以会有几率出现504请求失败

报错

2022/08/05 13:00:24 [error] 3389#e: *1092213 upstream timed out (110: Connection timed out) while reading upstream, client: 10.6. 18.19, server: localhost, request: “POST /rcenter/rpt/api/showReport HTTP/1.1”, upstream: “http://10.6.6.65:8880/rcenter/rpt/api/showReport” host: “10.6.6.67”

处理

增加后端超时时长参数

参数详解
proxy_connect_timeout与后端/上游服务器建立连接的超时时间
proxy_send_timeout与后端/上游服务器发送请求的超时时间
proxy_read_timeout与后端/上游服务器读取响应的超时时间
    server {
        listen 80;
        server_name localhost;
        location / {
                 root   html;
                 proxy_pass http://report;
		 proxy_set_header Host $host;
		 proxy_set_header X-Forwarded-For $remote_addr;
	   	 proxy_connect_timeout 600;
 	   	 proxy_send_timeout 600;
   		 proxy_read_timeout 600;

nginx504网关超时解决思路

环境

前端:nginx作代理

后端:nginx+php(耳朵分发服务)

问题:整套服务搭建完成之后,将打包好的ios包进行上传到分发服务器时,包传递完毕之后页面无法自动跳转

上述进度条走完之后,页面无法自动跳转。

解决思路

刚开始,以为是php的代码设置了超时时间,然后各种改代码,可是没什么卵用;然后以为是php有问题,然后修改php的超时时间,也没什么卵用。

最后,F12查看页面具体情况,发现:

原来是网关超时,应该是代理的nginx和后端nginx之间传输数据时发生超时。

最后,在前端nginx的配置文件中加入如下配置:

proxy_read_timeout 300

说明 该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。

这个时间不是获得整个response的时间,而是两次reading操作的时间。

如果后端有大文件传输的需求时,需要将此值调大一些。

proxy_send_timeout 300

说明 这个指定设置了发送请求给upstream服务器的超时时间。

超时设置不是为了整个发送期间,而是在两次write操作期间。

如果超时后,upstream没有收到新的数据,nginx会关闭连接

以上两个参数默认是60s超时,,由于上传的ios包需要的时间超过了60s,导致网关超时。

至此,问题得到解决。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文