一般的web服务器(Nginx)或者应用服务器(Tomcat)的默认请求,都是有默认超时设置的(一般默认60秒),超过这个时间我们的代码没有返回结果,用户端就会收到报错:504 GatewayTimeout, Tomcat应用服务器里,也可能收到ClientAbortException(Borken Pipe)等错误。
有时候确实有一些请求比较耗时(例如生成统计报表等),在1分钟内还没有处理好,程序或者nginx那边就报错了,所以有时候需要为Nginx或者Tomcat修改默认超时设置。
Nginx设置请求超时
nginx设置超时的设置是(以设置300s,5分钟为例,修改后重启nginx生效):
# 可以设置在http下(相当于全局) http { # 其他配置省略 proxy_read_timeout 300s; proxy_connect_timeout 300s; proxy_send_timeout 300s; # 其他配置省略 } # 也可以设置在server下,只针对某一个域名 server { # 其他配置省略 proxy_read_timeout 300s; proxy_connect_timeout 300s; proxy_send_timeout 300s; # 其他配置省略 } # 还可以只针对某一个特定的url设置 # 还可以设置更大一些值或者单位,比如 # proxy_connect_timeout 5m; #5分钟 # proxy_connect_timeout 2h; #2小时 # proxy_connect_timeout 2d; #2天 location /upload { # 其他配置省略 proxy_read_timeout 300s; proxy_connect_timeout 300s; proxy_send_timeout 300s; # 其他配置省略 }
Tomcat设置超时
Tomcat的超时设置在/tomcat/conf/server.xml下
找到Connector里面的connectionTimeout="20000",单位是毫秒,修改后重启Tomcat生效,如下
<!--connectionTimeout="20000" 默认20秒有点少,改成300000,也就是5分钟,或者-1表示用不超时,--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="300000" maxHttpHeaderSize="65536" redirectPort="8443" URIEncoding="UTF-8" maxThreads="800" acceptCount="1000"/>
SpringBoot中的应用服务器设置超时时间
请看:https://blog.terrynow.com/2021/06/22/spring-boot-rest-controller-request-timeout/
文章评论