haproxy反向代理功能配置

  

使用场景

  

假如要实现这样的环境:haproxy反向代理4个nginx节点,nginx1和nginx2结合php提供动态web服务,nginx3和nginx4提供静态web服务。如下图:

  

 haproxy反向代理功能配置

  

由于默认配置文件中和超时时间相关的设置比较不合理,所以建议修改这些时间。另外还有些建议开启或关闭的的项也尽量开启或关闭。

  

haproxy配置说明

  

关于haproxy安装与配置,可详见haproxy安装和常用命令

  

haproxy默认配置说明

  
 <代码> #查看默认haproxy。cfg配置文件
  猫/usr/local/haproxy/conf/haproxy.cfg
  
  全球
  日志127.0.0.1 local2 #需要设置/etc/rsyslog.conf加上local2设备的日志记录级别和日志路径
  chroot/usr/local/haproxy #这里通过编译安装到/usr/地方/haproxy,百胜安装默认在/var/lib/haproxy
  pidfile/var/run/haproxy.pid
  maxconn 4000 #这是前端对外的最大连接数。代理http时,1 g空闲内存承载20000年以上没大问题
  haproxy用户
  haproxy集团
  守护进程
  数据套接字/var/lib/haproxy/stats #开启动态查看,管理haproxy的状态文件
  #另外建议设置spread-checks全局项,且百分比建议为2 - 5之间
  违约
  http代模式http # 7层理,另有4层tcp代理
  日志全球
  选择httplog #在日志中记录http请求,会话信息等
  选择dontlognull #不要在日志中记录空连接
  选择http-server-close #后端为动态应用程序建议使用http-server-close,后端为静态建议使用http-keep-alive
  选择forwardfor除了127.0.0.0/8 # haproxy将在发往后端的请求中加上“X-Forwarded-For”首部字段
  选择redispatch #当某后端向下掉使得haproxy无法转发携带饼干的请求到该后端时,将其转发到别的后端上
  http请求超时10 #此为等待客户端发送完整请求的最大时长,应该设置较短些防止洪水* * *,如设置为2 - 3秒
  # haproxy总是要求一次请求或响应全部发送完成后才会处理,转发,
  超时队列1 m #请求在队列中的最大时长,1分钟太长了。设置为10秒都有点长,10秒请求不到资源客户端会失去耐心
  haproxy超时连接10 #和服务端建立连接的最大时长,设置为1秒就足够了。局域网内建立连接一般都是瞬间的
  客户机超时1 m #和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接
  超时服务器1 m #和服务端保持空闲连接的超时时长、局域网内建立连接很快,所以尽量设置短一些,特别是并发时,如设置为1 - 3秒
  超时http-keep-alive 10 #和客户端保持长连接的最大时长。优先级高于超时http请求高于客户机超时
  超时检查10 #和后端服务器成功建立连接后到最终完成检查的时长(不包括建立连接的时间,只是读取到检查结果的时长),
  #可设置短一点,如1 - 2秒
  maxconn 3000 #默认和前段的最大连接数,但不能超过全球中的maxconn硬限制数
   之前
  

说明? ?:

  

(1) haproxy是单进程,事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启的多进程/多实例。

  

(2) <代码> maxconn>   

 <代码> & lt; 1比;设置在全球段或前端/听/违约段的maxconn代表的是和客户端(即前端)的最大连接并发数;其中全球段的值是硬限制,前端/听/违约段的maxconn值不能超过全球段的值。
  
  & lt; 2比;设置在服务器指令中时,代表的是haproxy和某台后端服务器维持的最大并发连接数。
  
  & lt; 3比;前端的最大并发数(即全球段的maxconn)可以根据内存来估算,haproxy为每个连接维持两个缓存区,每个大致16 k左右,加上一些额外数据,共约33-34K左右,因此理论上1 g的空闲内存能维持2 w - 2.5 w个纯HTTP的并发连接(只是理论上),如果代理的是https,则允许的最大并发数量要小的多。前端maxconn默认值为2000,非常有必要将其增加几倍。一般代理纯HTTP服务时,如果后端能处理及时,这里设置20000以上都不会有什么问题。以上只是大致估算代理能力,实际设置时必须根据后端处理能力以及haproxy自身能力设置前端maxconn,否则将前端接进来后端也无法立即处理。
  
  & lt; 4比;后端所有服务器的maxconn值之和应接近前端的maxconn值,计算两者差距时,还需要考虑后端的等待队列长度maxqueue。其中和静态web服务器的maxconn可以设置大一些。

haproxy反向代理功能配置