nginx做反向代理,默认请求是有一个60秒的超时,如果http请求超过了60秒,再返回,连接就会被nginx中断,前端就会得到504的错误:gateway time-out。

如下,我们可以通过实验验证,默认的超时时间是60秒:

1、我们在页面上,做一个耗时的请求,后台线程sleep(70*1000),模拟这个耗时操作,让这个耗时操作撑过60秒。默认情况下,不使用nginx做反向代理,请求会在70秒后,正常返回。

2、我们使用nginx反向代理,将http://127.0.0.1/struts2hack的请求,代理到http://127.0.0.1:8080上,就是默认正常的请求服务上。

接着,我们点击页面的测试按钮,我们等待1分钟,会出现如下图所示的结果:

请求在一分钟后,即60秒时连接被断开,返回504。这个结果符合预期,说明了nginx默认超时时间是60s,超过60s,连接会被断开,为此,我们需要解决这个问题,就需要设置nginx超时时间了,这里我们将超时时间设置为3600,就是一个小时,这个值可以灵活设置,就是不让他在默认60秒断开链接。

location ~ /struts2hack {
    proxy_pass  http://127.0.0.1:8080;
    proxy_read_timeout  3600;
}

设置之后,我们再次点击页面的测试按钮,我们得到的结果就和最初一样了,经过70秒,服务端返回了数据,请求完成。

前端页面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"/><link rel="stylesheet" type="text/css" href="css/base.css"/><script type="text/javascript" src="js/libs/jquery-1.12.4.min.js"></script></head><body><h2>nginx timeout!</h2><div class="box"><input type="button" value="timeout测试" id="btn-test"/></div><div class="box">开始时间:<input type="text" name="start" id="start"></div> <div class="box">结束时间:<input type="text" name="end" id="end"></div><div class="box">返回数据:<input type="text" name="data" id="data"></div>  </body><script type="text/javascript">$(function(){$("#btn-test").click(function(e){$.ajax({url:"timeout!test.action",type:"get",beforeSend:function(){$("#start").val(new Date());},success:function(data){$("#data").val(data.message);$("#end").val(new Date());},error:function(XMLHttpRequest,textStatus,errorThrown){$("#end").val(new Date());$("#data").val("timeout");}});});});</script>
</html>

后端模拟70秒的耗时请求:

package com.xxx.action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
public class TimeoutAction {public String test() {HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("application/json;charset=UTF-8");PrintWriter out = null;try {Thread.sleep(70*1000);out = response.getWriter();String content = "{\"code\":200,\"message\":\"ok\"}";out.write(content);} catch (Exception e) {e.printStackTrace();}finally {if(out!=null) {out.close();}}return null;}
}

最初,我以为使用了jQuery的ajax请求超时,那么需要对ajax做一个超时设置,给参数timeout 设置上一个值,但是最终,发现问题不在ajax超时上,因为默认ajax是不会有超时的,就是永不超时,timeout:0就是默认值。这些可以在JQuery源码中找到。

nginx设置连接超时解决504 gateway timeout相关推荐

  1. 【Nginx】解决 504 Gateway Time-out

    文章目录 Nginx + FastCGI (php-fpm) Nginx Proxy Timeout 常见的对应报错信息 "504 Gateway Timeout" "5 ...

  2. 如何解决“504 Gateway Time-out”错误

    情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成 这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示"504 Gateway ...

  3. 504 gateway timeout解决方法

    1.HttpClient client HttpClient(connectionTimeout, socketTimeout) -> server 若socketTimeout<serv ...

  4. java 504错误怎么解决_504 Gateway Time-out 错误处理记录

    20190713 新建了一个 phpmyadmin,在 import 一个 install.sql 执行的时候,发现nginx 配置的phpmyadmin 网站一个超时错误 : 504 Gateway ...

  5. php 504网关,504 gateway timeout什么意思

    504 gateway time-out(504网关超时错误)是HTTP状态代码,这意味着一个服务器在尝试加载网页或填写浏览器的另一个请求时未从其访问的另一台服务器收到及时响应. 换句话说,504错误 ...

  6. 解决 502、504 Gateway Time-out(nginx)

    504 Gateway Time-out问题常见于使用nginx作为web server的服务器的网站 我遇到这个问题是在升级discuz论坛的时候遇到的 一般看来, 这种情况可能是由于nginx默认 ...

  7. Nginx报504 gateway timeout错误的解决方法

    提供给客户的bs软件,有一个导出报表的功能,经常性的报504错误 最近在工作中,需要做Excel导入的功能,由于Excel的数据比较多,而且我们的服务端程序需要对数据的内容做校验,会调用很多的外部服务 ...

  8. linux错误504怎么解决,Nginx提示504 Gateway Time-out错误的解决方法

    有说504 Gateway Time-out的错误提示与Nginx本身是没有任何关系的我们可以通过fastcgi配置参数的调整进行解决. 修改 php-fpm 配置文件: 1.把 max_childr ...

  9. 解决nginx 504 Gateway Time-out的一些方法

    在CentOS下配置lnmp组合基本上用的都是同样的配置文件,一直都没出现过问题,可最近在一个vps上安装同样的环境之后,网站在线10多人就出 现了打开速度非常缓慢的情况,有好几次都是直接达到了ngi ...

最新文章

  1. linux环境valgrind 安装
  2. 进入保护模式(一)——《x86汇编语言:从实模式到保护模式》读书笔记12
  3. 客制化键盘键位修改_干电池 支持5设备无线连接 - 高斯ALT71机械键盘拆解评测...
  4. vue-axios下载文件流blob,ie下载报传递给系统调用的数据区域太小.ie文件流下载报错;文件下载失败将blob的错误信息转换成json格式
  5. mysql存储过程实验几轮_想问下数据库中有关存储过程的实验,求大神!
  6. msp单片机UCS配置
  7. 马云给程序员脱离单身的一些建议
  8. CodeVs天梯黄金Gold题解
  9. gibboncode导入.stl格式模型,进行网格划分
  10. 读书笔记之吴伯凡·认知方法论
  11. matlab 读取mdf文件路径,从 MDF 文件中读取数据
  12. oracle 增量导出 导入,Oracle增量导入导出
  13. 如何在服务器上添加虚拟IP?看完原来如此简单
  14. 爬虫(21)crawlspider讲解古诗文案例补充+小程序社区案例+汽车之家案例+scrapy内置的下载文件的方法
  15. linux系统下alsa设备,linux alsa配置
  16. “引江济淮”工程全线开工 将建全球单跨最大渡槽
  17. mongodb查询文档
  18. android 打开微信好友动态,朋友圈可以查看“访客记录”?微信8.0.1不简单,新功能大解析...
  19. iphone表情显示问号_如何在iPhone上使用表情符号
  20. 新工必看:工作对于你意味着什么

热门文章

  1. qt实现头像上传功能
  2. Niagara控制点说明
  3. Word里面插入公式后行距变宽的问题
  4. 最新,2022软科世界大学学术排名发布
  5. 一个外键对应多条数据的删除
  6. 系统架构师之软件工程
  7. 用 Python 写个贪吃蛇,保姆级教程!
  8. 我和Java的爱恨情仇
  9. 【UE4】“xxx.generated.h”
  10. 【唯鲲科技】白标搭建需要注意哪些细节?