本文记录Nginx中网络连接的设置配置项。
1)读取HTTP头部超时时间
语法:client_header_timeout time(默认单位:秒);
默认:client_header_timeout 60;
配置块: http、server、location
在与客户端建立连接之后,将开始获取HTTP头部,如果在配置的时间之内没有读取到客户端发来的字节,就会返回超时码(408-Request timed out)。
2)读取HTTP包体超时时间
语法:client_body_timeout time(默认单位:秒);
默认:client_body_timeout 60;
配置块: http、server、location
在与客户端建立连接之后,如果在配置的时间之内没有读取到客户端发来的HTTP包体的字节,就会返回超时码(408-Request timed out)。
3)响应超时时间
语法:send_timeout time;
默认:send_timeout 60;
配置块:http、server、location
该配置是Nginx发送响应的超时时间,即向客户端发送了数据包之后,客户端在设置的超时时间之内没有去接受这个数据包,这样的话Nginx会关闭这个连接。
4)连接超时重置
语法:reset_timeout_connection on|off;
默认:reset_timeout_connection off;
配置块: http、server、location
该配置开启之后,如果Nginx与客户端的连接超时,Nginx不会走正常的四次挥手关闭TCP连接、释放资源,而是直接向客户端发送RST重置包,直接释放NGinx服务器上该套接字的所以缓存,并且不会等待客户端的同意。该配置可以有效减少服务器处于FIN_WAIT1、FIN_WAIT2与TIME_WAIT状态下的连接,但是使用Rst重置包关闭连接会带来一些问题,默认情况下不开启。
5)连接关闭方式
语法:lingering_close off|on|always;
默认:lingering_close on;
配置块:server、http、location
该配置决定了Nginx关闭用户连接的方式。off表示关闭连接时,不管连接上是否存在准备就绪的来自用户的数据。on表示一般情况下关闭连接前处理连接上用户发送的数据,除非是部分情况下业务上认为这些数据为无用数据。always表示关闭连接之前必须无条件的处理完连接上所有用户发送的数据。
6)连接时间
语法:lingering_time time;
默认:lingering_time 30s;
配置块: http、server、location
lingering_close启用之后,该配置对于上传大文件很有用,客户端有时会持续不断的上传HTTPbody,这时超时设置的连接时间之后,Nginx不管用户是否还在上传,都会直接将连接关闭。
7)连接超时时间
语法:lingering_timeout time;
默认:lingering_timeout 5s;
配置块: http、server、location
在lingering_close启用之后,在关闭连接时,将会检测是否有用户发送的数据到达服务器,如果超过设置的时间还没有数据的话,Nginx将会直接关闭连接,不然的话必须要读取完连接缓冲区的数据才会关闭连接。
8)禁用keepalive功能
语法:keepalive_disable [msie6|safari|none]...
默认:keepalive_disable msie6 safari;
配置块:http、server、location
HTTP请求中的keepalive功能是为了请求复用(多个请求使用同一个TCP连接),这样可以有效的提高服务器的性能。但是有一些浏览器对于keepalive功能的post请求处理有功能性问题,比如IE6与Safari,所以默认禁用了它们的keepalive功能。
9)keepalive超时时间
语法:keepalive_timeout time(默认单位:秒);
默认:keepalive_timeout 75;
配置块:http、server、location
一个长连接在闲置了一定的时间之后,服务器和浏览器都会区关闭这个连接。这个配置是来设置Nginx服务器关闭连接的超时时间的,浏览器的话会有不同的时间设置,不归服务器管。
10)长连接最大请求数
语法:keepalive_requests n;
默认:keepalive_requests 100;
配置块:http、server、location
一个长连接上默认最多只能发送100个请求。
11)tcp_nodelay
语法:tcp_nodelay on|off;
默认:tcp_nodelay on;
配置块:http、server、location
确定是否对长连接使用tcp_nodelay选项。启动TCP_NODELAY,就意味着禁用了Nagle算法(Nagle算法通过减少需要传输的数据包,来优化网络。在内核实现中,数据包的发送和接受会先做缓存,分别对应于写缓存和读缓存。),允许小包的发送。对于延时敏感型,同时数据传输量比较小的应用,开启TCP_NODELAY选项无疑是一个正确的选择。比如,对于SSH会话,用户在远程敲击键盘发出指令的速度相对于网络带宽能力来说,绝对不是在一个量级上的,所以数据传输非常少;而又要求用户的输入能够及时获得返回,有较低的延时。如果开启了Nagle算法,就很可能出现频繁的延时,导致用户体验极差。
12)tcp_nopush
语法:tcp_nopush on|off;
默认:tcp_nopush off;
配置块:http、server、location
在打开sendfile选项时,确定是否开启freebsd系统上的tcp_nopush或linux上tcp_cork功能。打开这个配置后,将会在发送响应时将整个响应包头放到一个TCP包中发送。