当用nginx来做前端的时候,有几个超时的设置是需要留意的:

upstream的 fail_timeout和max_fails

pstream的这2个参数是配合使用的,用来判断负载均衡upstream中的某个server是否失效。在fail_timeout的时间内,nignx与upstream中某个server的连接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。

fail_timeout默认为10秒,max_fails默认为1。是指在10秒内nginx与后端server连接失败尝试只有一次,如果在10秒内nginx与后端的连接失败达到一次,nginx认为这个server已失效,在接下来的10秒内,nginx将不会分发请求到这台后端。

如果max_fails=0,即关闭后端服务器健康检查,如果权重一样,那么每次请求都会有机会发到后端不可用的服务器。

另外,fail_timeout设置的时间对响应时间没影响,这个响应时间是用接下来的proxy_connect_timeout和proxy_read_timeout来控制。

proxy_connect_timeout

nginx与后端连接的超时时间,单位为秒,默认为60秒。我们在nginx错误日志里面看到的(110: Connection timed out),就是指nginx与后端连接已经超时。

proxy_read_timeout

建立连接后,nginx等候读取后端服务器响应的时间,默认为60秒。在一些比较繁忙的后端,比如线程数经常达到峰值了的tomcat,这个值注意不要设得太低,虽然线程数已经用光,但请求已经进入待队列之中。

proxy_send_timeout

nginx转发请求到后端的超时时间,默认为60秒,在这段时间内nginx没将请求数据发到后端将关闭连接。

这个在网站有比较多像表单(post)之类的需要留意一下。

可以用测试来对对上面所说的:

用来的测试的系统结构如下

web:8081(172.30.254.32)

/

request--〉nginx:80(172.30.254.33)-

\

web:81(172.30.254.33)

=============================================

测试1:测试fail_timeout、max_fails、proxy_connect_timeout

//nginx配置

----------------------------------

server 172.30.254.32:8081 max_fails=2 fail_timeout=15s weight=3;

server 172.30.254.33:81 max_fails=2 fail_timeout=15s weight=1;

proxy_connect_timeout 3;

在log最后加上 "$upstream_addr" "$upstream_status"

--------------------------------

在172.30.254.32上禁止访问8081口用于测试

[root@ localhos ]# iptables -A INPUT  -p tcp --dport 8081 -j DROP

测试开始

//发http请求并记录开始时间,-c 1 --并发为1,即20条请求是一条一条按顺序发

[root@localhos  tmp]# date;/usr/local/apache/bin/ab -n 20 -c 1

2012年 06月 30日 星期六16:11:55CST

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd,

------ 略-------

//看访问日志

[root@server33 tmp]# wc -l access.log

20 access.log    ##请求全部到达nginx

[root@server33 tmp]# cat access.log

172.30.254.33 - - [30/Jun/2012:16:11:58 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.32:8081, 172.30.254.33:81" "504, 200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.32:8081, 172.30.254.33:81" "504, 200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81" "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81" "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81 " "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81" "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81 " "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81" "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.33:81" "200"

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254. 33:81" "200"

---- 略 -----

//说明

请求开始的时间为16:11:55

nginx接到第一个请求的时间为16:11:58

nginx接到第二个请求的时间为16:12:01

可以看到隔间为3秒,等于上设置的proxy_connect_timeout 3

从上面可以看到,从11分55秒开始http请求,我设置的8081的weight比较高,nginx会先把请求发到32的8081口,但是32服务器的8081端口iptables挡住了,等了3s到了11分58秒还没建立连接,超时时间到,将请求发到一个服务(即33的81口)并成功响应。access.log记录第一条日志:

172.30.254.33 - - [30/Jun/2012:16:11:58 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.32:8081, 172.30.254.33:81" "504, 200"

第二个请求依然先发到8081口,跟上面的一样,3s超时,发到下一个服务并成功响应,时间为12分01秒。access.log记录第二条日志

172.30.254.33 - - [30/Jun/2012:16:12:01 +0800] "GET / HTTP/1.0" 200 7434 "-" "ApacheBench/2.3" "-""172.30.254.32:8081, 172.30.254.33:81" "504, 200"

第三个请求,在15秒内,8081口的通信失败次数已达到了max_fails设置的2次,nginx认为8081口已经不可用,在接下来的15秒,nginx会把所有的请求都分发到33的81口。从access.log可以看到,从第三条开始nginx连到的后端都是172.30.254.33:81

=============================================

测试2:测试proxy_read_timeout

//测试用cgi脚本

#!/usr/bin/python

# -*- coding: utf-8 -*-

import cgi, cgitb

from time import sleep

sleep(10)

print "Content-type:text/html\r\n\r\n"

print ""

print "

"

print "

test"

print ""

print "

"

print "Just for test"

print ""

print ""

##脚本会在10s后响应,proxy_read_timeout的时间设置少10s,看看测试情况

//nginx配置

----------------------------------

proxy_pass 172.30.254.33:81;

proxy_read_timeout 5;

----------------------------------

//开始测试

[root@localhost ~]# date;curl -I

2012年 06月 30日 星期六18:28:47CST

HTTP/1.1 504 Gateway Time-out

Server: nginx/0.8.18

Date: Sat, 30 Jun 2012 10:28:52 GMT

Content-Type: text/html

Content-Length: 183

Connection: keep-alive

2012年 06月 30日 星期六18:28:52CST

##服务器33的81口连接情况

root@server33]# date;netstat -na |grep 172.30.254.33:81 |grep tcp|grep -i estab

2012年 06月 30日 星期六 18:28:43 CST

[root@server33]# date;netstat -na |grep 172.30.254.33:81 |grep tcp|grep -i estab

2012年 06月 30日 星期六 18:28:49 CST

tcp        0      0 172.30.254.33:42731         172.30.254.33:81            ESTABLISHED

tcp        0      0 ::ffff:172.30.254.33:81     ::ffff:172.30.254.33:42731  ESTABLISHED

[root@server33]# date;netstat -na |grep 172.30.254.33:81 |grep tcp|grep -i estab

2012年 06月 30日 星期六 18:28:50 CST

tcp        0      0 172.30.254.33:42731         172.30.254.33:81            ESTABLISHED

tcp        0      0 ::ffff:172.30.254.33:81     ::ffff:172.30.254.33:42731  ESTABLISHED

[root@server33]# date;netstat -na |grep 172.30.254.33:81 |grep tcp|grep -i estab

2012年 06月 30日 星期六 18:28:51 CST

tcp        0      0 172.30.254.33:42731         172.30.254.33:81            ESTABLISHED

tcp        0      0 ::ffff:172.30.254.33:81     ::ffff:172.30.254.33:42731  ESTABLISHED

[root@server33]# date;netstat -na |grep 172.30.254.33:81 |grep tcp|grep -i estab

2012年 06月 30日 星期六 18:28:53 CST

//说明

18:28:47开始http请求,18:28:52达到proxy_read_timeout设置的5s时间还没收到后端的响应,超时退出、关闭连接并报504错误。在后端的33上可以看到连接情况,在18:28:47~18:28:52这段时间内,连接已经建立。

最后说一下proxy_connect_timeout的设置,不要看到nginx的错误日志里面有很多像504这类的超时错误就把proxy_connect_timeout设置的很高,这个个人觉得是不好的,这个值的设置跟tcp的超时时间和后端服务器的个数有很大关系。另外nginx认为这个值不要大于75s,据我查到的说法是--系统调用connect函数时,内核发送一个SYN,若无响应6s后再发送一个,若仍然无响应则等待24s后再发送一个,若等待了75s仍未响应则返回connect timeout错误。

nginx访问服务器未响应,nginx与后端的超时设置测试相关推荐

  1. 怎么访问二级服务器未响应,windows+访问服务器未响应

    windows+访问服务器未响应 内容精选 换一换 OBS Browser+是一款用于访问和管理对象存储服务的图形化工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Windows ECS通 ...

  2. 突然不能访问服务器未响应,windows 访问不服务器未响应

    windows 访问不服务器未响应 内容精选 换一换 OBS Browser+是一款用于访问和管理对象存储服务的图形化工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Windows ECS ...

  3. outlook 服务器未响应,出现错误,Outlook 无法设置你的帐户

    问题 使用自定义域或具有个性化电子邮件地址的 Outlook.com 帐户添加 Microsoft 365 的 Outlook 帐户时,收到以下错误: 原因 出现此问题的原因是 Outlook 使用的 ...

  4. 水星mw325r设置无线服务器未响应,水星MW325R无线路由器上网的设置技巧

    电脑上需要用宽带连接(或者类似的拨号程序), (1).宽带拨号上网 如果办理宽带宽带业务后. 在设置水星MW325R路由器上网时,然后按下键盘上的回车 在浏览器中输入:melogin.cn 2.创建登 ...

  5. tplink路由器dns服务器未响应,小米路由器AC2100恢复出厂设置的方法

    要把已经设置好的小米路由器AC2100恢复出厂设置重新设置,我该怎么办? 路由器恢复出厂设置一般有三种方法 APP恢复出厂设置 手动恢复出厂设置 浏览器恢复出厂设置 这里就介绍最简单快捷的手动恢复出 ...

  6. 水星路由器DNS服务器未响应,水星路由器进不去设置怎么办

    摘 要 水星路由器进不去设置怎么办?这里要分两种情况,旧版水星路由器与新版水星路由器一.旧版水星路由器 1.当打开水星路由器设置页面,如果提示你输入用户名和密码,如下图所示.说明这是一台旧版本的水星路 ...

  7. 腾达路由器dns服务器未响应,荣耀猎人游戏路由怎么设置

    摘 要 新买的荣耀猎人游戏路由该怎么设置上网呢?要设置荣耀猎人游戏路由可以按照以下步骤去设置上网,这里介绍的是用手机浏览器去设置,也可以下载路由器APP去设置. 第一步.路由器进行线路连接 1.请把从 ...

  8. 光猫 DHCP服务器未响应,案例分享--光猫手工设置后死机的原因之一

    虽然现在联通业务开通已经实现了全自动,但在日常维护中仍会遇到手工设置光猫的情况(况且手工设置更能锻炼人员能力,提升人员技术水平),目前有人员反映通过LAN2口对光猫进行设置后光猫就没有反映了,就死掉落 ...

  9. 水星mw325r设置无线服务器未响应,MERCURY水星325R路由器的设置方法

    前几天路由器坏了,网上购物也费劲,搞了半天时间才选个性价比高的,试用了几天,很好用.在此分享一下. 此处以无线安装为例,因为家庭基本都用无线连接的 一.准备工作 1.PPPoP的帐号和密码 这是你开通 ...

最新文章

  1. 漫画:程序员太难了!为什么 Java 中的 main 方法必须是它?
  2. Chevereto图片托管php源码_亲测-分享最新微信付费进群收费进群系统源码-附带搭建教...
  3. 矩阵对抗与漏洞补丁201001(第4期)
  4. java登录界面命令_Java命令行界面(第10部分):picocli
  5. 恩墨学院丨OBCP墨天轮精品课正式上线啦~
  6. php smarty if,php Smarty中if,elseif,else用法详解
  7. Java基础6:代码块与代码加载顺序
  8. 可靠性五性分析标准和国军标参考(文件分享)
  9. windows7无声音,提示扬声器、耳机未插入的解决办法!电脑右下角喇叭显示未插入扬声器或耳机怎么解决!
  10. 开运魔法,晓腾叔叔的日常迷信。
  11. 小鸟云服务器如何通过本地安全策略阻止IP访问?
  12. 心不动——王阳明最可怕之处
  13. JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别
  14. 数据库之SQL的主键和外键的作用
  15. c#获取公网的ip,本机ip 以及当前城市以及运营商
  16. 环回接口是做什么的?
  17. 大数据与云计算学习计划 (一) 云计算系统管理 6 Linux中RPM软件包管理操作 、 Yum软件包仓库操作(概念与实操)
  18. arcgis网络分析最短距离_ArcGIS网络分析(最短路径问题分析)
  19. 楚汉诸侯战天下隐私政策
  20. Mac系统NTFS磁盘读写软件Tuxera NTFS for Mac2022

热门文章

  1. google map 离线数据
  2. 武汉java工资水平
  3. SQL 02 基础查询与排序
  4. 光晕ce服务器位置,光晕ce地图
  5. PRML - Chapter 02 Probability Distributions
  6. 《汇编语言》王爽(第四版)第八章 实验7
  7. 如何把两段即以上视频合并成一个
  8. 魔法少女小Scarlet
  9. 斯凯奇熊猫鞋怎样清洗
  10. 基于Flask的文章内容管理系统(CMS)