精华内容
下载资源
问答
  • Nginx关于连接超时配置的实验

    万次阅读 2017-02-12 23:26:17
    本文根据别人对Nginx连接超时配置,结合自己实验的经验,来做个总结。 环境搭建如下: 1.宿主机是WIN7,安装了Nginx 2.有3个tomcat以及memcached安装在同一个虚拟机里。系统是CentOs。第三个tomcat作为后备机。 3....

    最近在断断续续研究Nginx+Memcached+Tomcat实现均衡负载。总算搞出来了,在我另一博文有总结。本文根据别人对Nginx连接超时的配置,结合自己实验的经验,来做个总结。


    环境搭建如下:

    1.宿主机是WIN7,安装了Nginx

    2.有3个tomcat以及memcached安装在同一个虚拟机里。系统是CentOs。第三个tomcat作为后备机。

    3.通过httpwatch来观察请求情况


    实验观察的是登录页面。页面会显示当前的session以及机子信息,代码如下:

    SessionID:<%=session.getId()%>
    <br>
    SessionIP:<%=request.getServerName()%>
    <br>
    SessionPort:<%=request.getServerPort()%>
    <br>
    <%
    out.println("This is Timcat Server 1");
    %>

    效果如下:


    或者



    Nginx的配置里,设置如下:

     upstream  netitcast.com {  #服务器集群名字   
            server    192.168.88.103:8080  weight=1 ;    #tomcat1
            server    192.168.88.103:8082  weight=1 ;   #tomcat2
            server    192.168.88.103:8084  backup ;     #tomcat3
        }     

    location / {  
                proxy_pass http://netitcast.com;  
                proxy_redirect default;  
       proxy_connect_timeout 10;
            }  

    此配置意思是,每个从Nginx分发的请求,连接到后台(tomcat X)的连接如果超过10秒,则视为连接失败,Nginx会将此请求分发到另一台tomcat。在一段时期内(现在不知道有多长),后续的请求都不会再发送到tomcat X了。过了一段时期后再送请求,又有可能把请求发送到tomcat X。此时,只要超时一次,则在往后一段时间内不再往tomcatX分发。


    现在,如果我把tomcat1关闭,httpwatch的观察情况如下:


    获取页面的请求用了10.033秒时间。我的理解是,这个请求被分发到tomcat1,然而此机已经关闭了,所以等了10秒。10秒后Nginx还没收到响应,则将请求往另一台机分发(tomcat2),而另一台机只用了0.033秒的时间就响应了。而页面里的css文件和js文件都在这时间基础上往tomcat2发送请求获取。


    如果我将Nginx的配置改成如下:

        #服务器的集群  
        upstream  netitcast.com {  #服务器集群名字   
            #server    192.168.218.129:8080  weight=1 max_fails=2 fail_timeout=600s;  
            #server    192.168.218.131:8080  weight=1 max_fails=2 fail_timeout=600s;  
            server    192.168.88.103:8080  weight=2 max_fails=2;  #tomcat1
            server    192.168.88.103:8082  weight=2 max_fails=2;  #tomcat2
            server    192.168.88.103:8084  backup ;    #tomcat3
        }     

    location / {  
                proxy_pass http://netitcast.com;  
                proxy_redirect default;  
        proxy_connect_timeout 10;
            }  

    重启Nginx,情况如下图:



    此处的配置不同处是,在分发的机子后面多了max_fails=2的配置。请求主页面的时候用了11.037秒,即首先Nginx把请求分发给tomcat1,由于tomcat1已经关闭,所以Nginx等了10秒都没得到响应,于是把原请求分发到tomca2,tomcat2用了1.037秒就响应了。然后在此时间基础上,页面并发地向Nginx发请求获取静态资源,这时有4个js请求首次是发向tomcat1。

    对此,我猜测是这样。Nginx是按10秒作为监测间隔。第一个10秒内,发向tomcat1有一个请求超时,所以此时tomcat1仍生效。到了第二个10秒内,有4个请求发往tomcat1,且都超时,因为超时次数大于2次,所以后续页面其他的静态资源全部没再往tomcat1分发。但过一段时间后,我如果刷新页面,依旧有请求会被分发到tomcat1去。

    也就是说,过了一段时间后,Nginx会把tomcat1当作正常的服务器,往它发分请求。而从上次认为异常到下次重新视为正常状态这个时间段有多长,我现在不知道。

    这样的优点是,tomcat1挂掉了,但后续修复好后,直接重启tomcat1就行了。但缺点也很明显,在未修复重启前,每隔一段时间都会有某些请求会往tomcat1发送,这样就总会有某些请求要等至少10秒。如果没有设置max_fails值,则每10秒内只有一个请求要等10秒,如果设置为2以上,则就会很多了。


    如果我再修改下Nginx配置如下:

    #服务器的集群  
        upstream  netitcast.com {  #服务器集群名字   
            server    192.168.88.103:8080  weight=2 max_fails=2 fail_timeout=20s;  #tomcat1
            server    192.168.88.103:8082  weight=2 max_fails=2 fail_timeout=20s;  #tomcat2

             server    192.168.88.103:8084  backup ;    #tomcat3

        }     

    这次配置多了fail_timeout属性。

    重启Nginx后,首次刷页面,情况如下:


    后续再刷页面,大致如下:


    也就是说,在20秒内,后续的请求都不再往tomcat1分发了。无论刷多少遍都一样。从页面显示的机子号可看得出来。


    20秒内,永远都是"This is Timcat Server2"


    所以多了fail_timeout属性后,在指定的时间段内连接超时次数达到max_fails次数后,这台机子就临时被判了死刑。

    这样配置的优点是,第一个10秒内分发到tomcat1的请求要等至少10秒,当机子被判死刑后,所有请求都往活着的机子分发了。而当tomcat1机子修复后并重启,就能正常使用了。

    针对这种配置,假如我设置fail_timeout=600s,继续关闭tomcat2,则由tomcat3这后备机来处理请求。如果tomcat3也关闭,会报505网关异常。


    所以个人觉得,加上fail_timeout属性,非常有用。


    展开全文
  • nginx做反向代理,默认请求是有一个60秒的超时,如果http请求超过了60秒,再返回,连接就会被nginx中断,前端就会得到504的错误:gateway time-out。 如下,我们可以通过实验验证,默认的超时时间是60秒: 1、我们...

    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——优化 Nginx 连接超时时间

    千次阅读 2018-09-02 20:15:37
    什么是连接超时 (1) 举个例子,某饭店请了服务员招待顾客,但是现在饭店不景气,...(1) 将无用的连接设置为尽快超时,可以保护服务器的系统资源(CPU、内存、磁盘) (2) 当连接很多时,及时断掉那些建立好的但又...
    1. 什么是连接超时

    (1) 举个例子,某饭店请了服务员招待顾客,但是现在饭店不景气,因此要解雇掉一些服务员,这里的服务员就相当于 Nginx 服务建立的连接

    (2) 当服务器建立的连接没有接收处理请求时,可以在指定的时间内让它超时自动退出

    1. 连接超时的作用

    (1) 将无用的连接设置为尽快超时,可以保护服务器的系统资源(CPU、内存、磁盘)

    (2) 当连接很多时,及时断掉那些建立好的但又长时间不做事的连接,以减少其占用的服务器资源

    (3) 如果黑客攻击,会不断地和服务器建立连接,因此设置连接超时以防止大量消耗服务器的资源

    (4) 如果用户请求了动态服务,则 Nginx 就会建立连接,请求 FastCGI 服务以及后端 MySQL 服务,设置连接超时,使得在用户容忍的时间内返回数据

    1. 连接超时存在的问题

    (1) 服务器建立新连接是要消耗资源的,因此,连接超时时间不宜设置得太短,否则会造成并发很大,导致服务器瞬间无法响应用户的请求

    (2) 有些 PHP 站点会希望设置成短连接,因为 PHP 程序建立连接消耗的资源和时间相对要少些

    (3) 有些 Java 站点会希望设置成长连接,因为 Java 程序建立连接消耗的资源和时间要多一些,这时由语言的运行机制决定的

    1. 设置连接超时

    (1) keepalive_timeout :该参数用于设置客户端连接保持会话的超时时间,超过这个时间服务器会关闭该连接

    (2) client_header_timeout :该参数用于设置读取客户端请求头数据的超时时间,如果超时客户端还没有发送完整的 header 数据,服务器将返回 “Request time out (408)” 错误

    (3) client_body_timeout :该参数用于设置读取客户端请求主体数据的超时时间,如果超时客户端还没有发送完整的主体数据,服务器将返回 “Request time out (408)” 错误

    (4) send_timeout :用于指定响应客户端的超时时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接

    (5) tcp_nodelay :默认情况下当数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高 I/O 性能,但是,在每次只发送很少字节的业务场景中,使用 tcp_nodelay 功能,等待时间会比较长

    http {

    include mime.types;

    server_names_hash_bucket_size 512;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    tcp_nodelay on;

    client_header_timeout 15;

    client_body_timeout 15;

    send_timeout 25;

    include vhosts/*.conf;

    }

    作者简介:
    陈志珂(头条号:强扭的瓜不好吃),公众号“铅笔学园”运维内容合作作者之一。目前就职于中国最大的安卓应用软件公司,任高级工程师,现在公司任php开发工程师,python开发工程师,高级运维工程师。
    铅笔学园:IT资源分享|知识分享,做初级程序员的指明灯

    这里写图片描述

    展开全文
  • 问题:上传excel文件解析数据并加载数据到MySql数据库表中的时候,报错(该Excel文件有13105列)最终返回给浏览器 POST ...默认的读取超时时间是 60s后来设置如下参数解决proxy_connect_timeout后...
    问题:上传excel文件解析数据并加载数据到MySql数据库表中的时候,报错(该Excel文件有13105列)最终返回给浏览器 POST http://.......404 not found nginx
    解决:
    原因:
    后台程序处理的时间过长,但是访问后端接口走的是nginx代理
    nginx使用proxy模块时,默认的读取超时时间是 60s
    后来设置如下参数解决
    proxy_connect_timeout
    后端服务器连接的超时时间_发起握手等候响应超时时间
    proxy_read_timeout
    连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
    proxy_send_timeout
    后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据

    转载于:https://www.cnblogs.com/nice520/p/8494032.html

    展开全文
  • 1. 什么是连接超时 当服务器建立的连接没有接收处理请求时,可以在指定的时间内让它超时自动退出 ...(3) 如果黑客攻击,会不断地和服务器建立连接,因此设置连接超时以防止大量消耗服务器的资源 ...
  • 在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可以设置相应的连接超时参数,实现控制连接访问时间。keepalived_timeout :设置连接保持超时时间,一般可只设置该参数,默认为 75 秒,可根据网站...
  • 修改nginx.conf配置文件 增加下面三项即可 fastcgi_connect_timeout 500; fastcgi_send_timeout 500; fastcgi_read_timeout 500; 重启nginx
  • 可以通过对nginx进行超时配置来解决,但如果用户从前端上传一个更大的文件,那就需要不断修改这个超时时间,想问有没有一种回调机制,先断开django与nginx连接,等待django将文件处理完毕后,再通过回调机制调起...
  • 前提 在利用nginx做反向代理的时候,后端使用阿里云视频点播服务,上传...在nginx配置文件中给这个接口地址加上一个长连接设置 keepalive_timeout 120s; //修改连接关闭时间为120s 补充 只有在http1.1协议的时候
  • nginx - 配置连接超时时间

    千次阅读 2017-09-10 18:19:05
    与用户建立会话连接后,Nginx服务器可以保持这些连接打开一段时间,指令keepalive_timeout就是用来设置此时间的。 其语法结构为: keepalive_timeout timeout [header_timeout]  timeout: 服务器端对连接的保持...
  • 理解了下nginx 所有timeout相关的配置,如下: keepalive_timeout HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个...
  • Nginx超时设置.docx

    2020-07-02 18:03:36
    nginx中的超时设置,请求超时、响应等待超时等: nginx timeout 配置 全局timeout 局部timeout web timeout nginx比较强大,可以针对单个域名请求做出单个连接超时配置. 比如些动态解释和静态解释可以根据业务的...
  • 解决方案 nginxnginx.conf 中添加 fastcgi_read_timeout 3600s;
  • nginx比较强大,可以针对单个域名请求做出单个连接超时配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout:后端服务器连接超时时间_发起握手等候响应超时时间 proxy_read_timeout:...
  • Nginx常用的超时配置说明 client_header_timeout 语法 client_header_timeout time 默认值 60s 上下文 http server(指可以放在http块和server块) 说明 指定等待client发送一个请求头的超时时间(例如:GET / ...
  • 性能优化-优化Nginx连接参数,调整连接超时时间worker_connections增加连接数,但不是意味着通过worker_connections增大了,就可以浪费,在一定程度上通过超时时间控制,可以有效的节省连接数,不会造成资源浪费,即...
  • Nginx 配置超时时间

    千次阅读 2020-09-22 16:44:03
    keepalive_timeout 1800s; #指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。... #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 1800s; #后端服务器数据回传..
  • nginx中的超时配置

    2019-09-30 18:42:35
    nginx.conf配置文件中timeout超时时间设置 client_header_timeout 语法 client_header_timeout time默认值 60s上下文 http server(指可以放在http块和server块)说明 指定等待client发送一个请求头的超时时间...
  • nginx 和 php超时设置

    2019-02-28 10:05:00
    nginx.conf --- http节:keepalive_timeout 600;... #php-fpm连接超时时间(等待php执行的最长时间,超过这个会向浏览器返回504或502)fastcgi_send_timeout 600; #fastcgi_read_timeout 600;php-fpm.conf :pm...
  • NGINX 配置超时时间

    千次阅读 2018-06-11 17:16:33
    一、啥时候用到用来设置请求资源和服务器返回的时间,保证一个请求占用固定时间,超出后报504超时!这样可以保证一个请求占用过长时间。二、主要参数 使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用...
  • 修改你的nginx配置文件,我的样例如下: # interface.conf # configuration of the server server { # the port your site will be served on listen 8099; # the domain name it will serve for server_...
  • Jenkins通过nginx调用后端服务超时,是由于后端逻辑复杂消耗时间长,可以通过修改nginx超时时间解决。 2020/04/21 00:31:22 [error] 86#0: *372962 upstream timed out (110: Connection timed out) while reading ...
  • Nginx 域名解析超时

    2020-04-13 16:34:52
    发现公司的ip变化了,通过nginx代理的服务报超时错误,总是报找不到后端连接地址。如果没有通过nginx,而是直接通过域名访问是没有问题的。查看了下日志,发现nginx日志里面的域名解析还是解析到原来绑定的ip地址,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,782
精华内容 20,712
关键字:

nginx连接配置超时