haproxy反向代理可以代理https吗

如何在Linux上使用HAProxy配置HTTP负载均衡系统_百度知道
如何在Linux上使用HAProxy配置HTTP负载均衡系统
提问者采纳
  TTP负载均衡简介  HTTP负载均衡是一种网络解决方案,负责在托管相同应用内容的几台服务器之间分配进入的HTTP或HTTPS流量。由于在多台可用服务器之间均衡了应用请求,负载均衡系统就能防止任何应用服务器变成单一故障点,因而提高了整体的应用可用性和响应能力。它还让你可以随着不断变化的工作负载,轻松地缩小/扩大部署的应用系统的规模,只需添加或删除额外的应用服务器。  哪里使用负载均衡、何时使用?  由于负载均衡系统改进了服务器的利用率,最大限度地提高了可用性,只要你的服务器开始面临繁重负载,或者正为一个较庞大的项目规划架构,就应该使用它。事先规划好负载均衡系统的用途是个好习惯。那样,未来你需要扩展环境规模时,它会证明其用途。  HAProxy是什么东东?  HAProxy是一种流行的开源负载均衡和代理系统,面向GNU/Linux平台上的TCP/HTTP服务器。HAProxy采用了单一线程的事件驱动型架构而设计,它能够轻松地处理10G网卡线路速度,现广泛应用于许多生产环境中。其功能特性包括:自动检查健康状况、可定制的负载均衡算法、支持HTTPS/SSL以及会话速率限制等。  我们在本教程中要达到什么样的目的?  在本教程中,我们将逐步介绍为HTTP网站服务器配置基于HAProxy的负载均衡系统这个过程。  前提条件  你至少需要一台(最好是两台)网站服务器来证实所搭建负载均衡系统的功能。我们假设,后端HTTP网站服务器已经搭建并运行起来。  将HAProxy安装到Linux上  就大多数发行版而言,我们可以使用你所用发行版的软件包管理器来安装HAProxy。  将HAProxy安装到Debian上  在Debian中,我们需要为Wheezy添加向后移植功能。为此,请在/etc/apt/sources.list.d中创建一个名为“backports.list”的新文件,其内容如下:  deb
wheezy­backports main  更新你的软件库数据,并安装HAProxy。  # apt­ get update  # apt ­get install haproxy  将HAProxy安装到Ubuntu上  # apt ­get install haproxy  将HAProxy安装到CentOS和RHEL上  # yum install haproxy  配置HAProxy  在本教程中,我们假设有两台HTTP网站服务器已搭建并运行起来,其IP地址分别为192.168.100.2和192.168.100.3。我们还假设,负载均衡系统将在IP地址为192.168.100.4的那台服务器处进行配置。  为了让HAProxy发挥功用,你需要更改/etc/haproxy/haproxy.cfg中的几个项目。这些变更在本章节中予以描述。万一某个配置对不同的GNU/Linux发行版而言有所不同,会在相应段落中加以注明。  1. 配置日志功能  你首先要做的工作之一就是,为你的HAProxy建立合适的日志功能,这对将来进行调试大有用处。日志配置内容位于/etc/haproxy/haproxy.cfg的global部分。下面这些是针对特定发行版的指令,用于为HAProxy配置日志。  CentOS或RHEL:  要想在CentOS/RHEL上启用日志功能,把:  log 127.0.0.1 local2  换成:  log 127.0.0.1 local0  下一步,在/var/log中为HAProxy创建单独的日志文件。为此,我们需要改动当前的rsyslog配置。为了让配置简单而清楚,我们将在/etc/rsyslog.d/中创建一个名为haproxy.conf的新文件,其内容如下。  $ModLoad imudp  $UDPServerRun 514  $template Haproxy,&%msg%\n&  local0.=info ­/var/log/haproxy.Haproxy  local0.notice ­/var/log/haproxy­status.Haproxy  local0.* ~  该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。  # service rsyslog restart  Debian或Ubuntu:  要想在Debian或Ubuntu上为HAProxy启用日志功能,把:  log /dev/log local0  log /dev/log local1 notice  换成:  log 127.0.0.1 local0  下一步,为HAProxy配置单独的日志文件,编辑/etc/rsyslog.d/中一个名为haproxy.conf的文件(或者Debian中的49-haproxy.conf),其内容如下。  $ModLoad imudp  $UDPServerRun 514  $template Haproxy,&%msg%\n&  local0.=info ­/var/log/haproxy.Haproxy  local0.notice ­/var/log/haproxy­status.Haproxy  local0.* ~  该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。  # service rsyslog restart  2. 设置默认值  下一步是为HAProxy设置默认变量。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它换成下列配置。  log
global  mode
http  option
httplog  option
dontlognull  retries 3  option redispatch  maxconn 20000  contimeout
5000  clitimeout
50000  srvtimeout
50000  上述配置推荐HTTP负载均衡器使用,但可能不是最适合你环境的解决方案。如果那样,请参阅HAProxy参考手册页,进行适当的改动和调整。  3. 网站服务器集群的配置  网站服务器集群(Webfarm)的配置定义了可用的HTTP服务器集群。我们所建负载均衡系统的大部分设置都将放在这里。现在,我们将创建一些基本的配置,我们的节点将在这里加以定义。把从frontend部分到文件末尾的所有配置换成下列代码:  listen webfarm *:80  mode http  stats enable  stats uri /haproxy?stats  stats realm Haproxy\ Statistics  stats auth haproxy:stats  balance roundrobin  cookie LBN insert indirect nocache  option httpclose  option forwardfor  server web01 192.168.100.2:80 cookie node1 check  server web02 192.168.100.3:80 cookie node2 check  “listen webfarm *:80”这一行定义了我们的负载均衡系统将侦听哪些接口。出于本教程的需要,我将该值设为“*”,这让负载均衡系统侦听我们的所有接口。在实际场景下,这可能不合意,应该换成可从互联网来访问的某个接口。  stats enable  stats uri /haproxy?stats  stats realm Haproxy\ Statistics  stats auth haproxy:stats  上述设置声明,可以在http://&load-balancer-IP&/haproxy?stats处访问负载均衡系统的统计数字。这种访问由简单的HTTP验证以及登录名“haproxy”和密码“stats”来确保安全。这些设置应该换成你自己的登录信息。如果你不想让这些统计数字被人看到,那么可以完全禁用它们。  下面是HAProxy统计数字的一个例子。  “balance roundrobin”这一行定义了我们将使用哪种类型的负载均衡。在本教程中,我们将使用简单的轮叫调度算法,这对HTTP负载均衡来说完全绰绰有余。HAProxy还提供了其他类型的负载均衡:  •leastconn:连接数最少的服务器优先接收连接。  •source:对源IP地址进行哈希处理,用运行中服务器的总权重除以哈希值,即可决定哪台服务器将接收请求。  •uri:URI的左边部分(问号前面)经哈希处理,用运行中服务器的总权重除以哈希值。所得结果决定哪台服务器将接收请求。  •url_param:变量中指定的URL参数将在每个HTTP GET请求的查询串中进行查询。你基本上可以将使用蓄意制作的URL(crafted URL)的请求锁定于特定的负载均衡节点。  •hdr(name):HTTP头&name& 将在每个HTTP请求中进行查询,被定向到特定节点。  “cookie LBN insert indirect nocache”这一行让我们的负载均衡系统存储持久性cookie,这让我们得以准确查明集群中的哪个节点用于某一个会话。这些节点cookie将与指定的名称一并存储起来。在我们这个例子中,我使用了“LBN”,但你可以指定自己喜欢的任意名称。节点将为该cookie把字符串作为一个值而存储起来。  server web01 192.168.100.2:80 cookie node1 check  server web02 192.168.100.3:80 cookie node2 check  上述部分对网站服务器节点集群进行了定义。每台服务器都用内部名称(比如web01和web02)、IP地址和独特的cookie串来表示。cookie串可以定义为你需要的任何名称。我使用了简单的node1、node2 ... node(n)。  启动HAProxy  你完成了配置工作后,可以启动HAProxy,验证一切按预期运行。  在Centos/RHEL上启动HAProxy  使用下列指令,让HAProxy能够在系统启动后启动,并打开它:  # chkconfig haproxy on  # service haproxy start  当然,别忘了启用防火墙中的端口80,如下所示。  CentOS/RHEL 7上的防火墙:  # firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp  # firewall­cmd ­­reload  CentOS/RHEL 6上的防火墙:  把下面这一行添加到/etc/sysconfig/iptables中的这部分“:OUTPUT ACCEPT”:  A INPUT ­m state ­­state NEW ­m tcp ­p tcp ­­dport 80 ­j ACCEPT  然后重启iptables:  # service iptables restart  在Debian上启动HAProxy  使用下列指令启动HAProxy:  # service haproxy start  别忘了启用防火墙中的端口80,为此把下面这一行添加到/etc/iptables.up.rules:  A INPUT ­p tcp ­­dport 80 ­j ACCEPT  在Ubuntu上启动HAProxy  让HAProxy能够在系统启动后启动,只要在/etc/default/haproxy中将“ENABLED”选项设为“1”:  ENABLED=1  启动HAProxy:  # service haproxy start  然后启用防火墙中的端口80:  # ufw allow 80  测试HAProxy  为了检查HAproxy是否在正常工作,我们可以执行下列步骤:  首先,用下列内容准备好test.php文件:  &?php  header('Content-Type: text/plain');  echo &Server IP: &.$_SERVER['SERVER_ADDR'];  echo &\nX-Forwarded-for: &.$_SERVER['HTTP_X_FORWARDED_FOR'];  ?&  该PHP文件将告诉我们哪台服务器(即负载均衡系统)转发请求,哪台后端网站服务器实际处理请求。  把该PHP文件放到这两台后端网站服务器的根目录下。现在,使用curl命令,从负载均衡系统(192.168.100.4)提取这个PHP文件。  $ curl   我们多次运行这个命令时,应该会看到下面两个输出交替出现(由于轮叫调度算法)。  Server IP: 192.168.100.2  X-Forwarded-for: 192.168.100.4  Server IP: 192.168.100.3  X-Forwarde穿禒扁溉壮防憋狮铂饯d-for: 192.168.100.4  如果我们停止这两台后端网站服务器中的其中一台,curl命令应该仍会执行,将请求定向到另一台可用的网站服务器。  结束语  至此,你应该有了一套完全实用的负载均衡系统,能够在轮叫循环模式下为你的网站节点提供请求。与往常一样,你可以随意更改配置,让它更适合自己的基础设施。希望本教程帮助你让自己的网站项目具有更强的抗压力和更高的可用性。  正如大家已经注意到的那样,本教程所含的设置适用于仅仅一套负载均衡系统。这意味着,我们把一个单一故障点换成了另一个单一故障点。在实际场景下,你应该部署至少两套或三套负载均衡系统,以防范可能出现的任何故障,但这不在本教程的讨论范围之内。
其他类似问题
为您推荐:
haproxy的相关知识
其他1条回答
要两个机器 做双机 安装双机软件
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Haproxy实现多域名证书HTTPS_服务器应用_Linux公社-Linux系统门户网站
你好,游客
Haproxy实现多域名证书HTTPS
来源:Linux社区&
作者:fengwan
我们讲到,使用Nginx实现多域名证书HTTPS( ),通过重新编译Nginx实现TLS SNI Support打开,那么使用Haproxy如何实现呢?
Haproxy必须要1.5以上的版本
第一步:openssl的安装
tar zxf openssl-0.9.8zh.tar.gzcd openssl-0.9.8zh./config enable-tlsext --prefix=/usr/local/openssl& no-sharedmake && make install_sw#以上安装不影响系统中的openssl版本,主要就是打开openssl的TLS SNI功能
第二步:Haproxy的安装
tar zxf haproxy-1.5.15.tar.gzcd haproxy-1.5.15make TARGET=linux26 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 ARCH=x86_64 PREFIX=/usr/local/haproxy1.5.15 SSL_INC=/usr/local/openssl/include SSL_LIB=/usr/local/openssl/lib ADDLIB=-ldlmake TARGET=linux26 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 ARCH=x86_64 PREFIX=/usr/local/haproxy1.5.15 SSL_INC=/usr/local/openssl/include SSL_LIB=/usr/local/openssl/lib ADDLIB=-ldl install#记得上面要指定openssl的地址,haproxy没有config这步
第三步:生成证书
[root@gz122haproxy95 ~]# mkdir ~/keys[root@gz122haproxy95 keys]# cd ~/keys[root@gz122haproxy95 keys]# openssl genrsa -out .key 2048[root@gz122haproxy95 keys]# openssl req -new -key .key -out .csr& You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [GB]:CN&
#国家State or Province Name (full name) [Berkshire]:GuangDong& #省份Locality Name (eg, city) [Newbury]:ShenZhen&
#城市Organization Name (eg, company) [My Company Ltd]:Test.Inc& & #公司名称Organizational Unit Name (eg, section) []:& & #组织名称Common Name (eg, your name or your server's hostname) []:&
#域名Email Address []:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:[root@gz122haproxy95 keys]# openssl x509 -req -days 3650 -in .csr -signkey .key -out .crt[root@gz122haproxy95 keys]# cat .crt .key |tee .pem
按照以上方法依次生成 的证书文件,每个站点最后会有一个pem文件生成
配置Haproxy的配置文件:
frontend http_server& & & & bind :80& & & & bind :443 ssl crt /etc/haproxy/keys/.pem crt /etc/haproxy/keys/.pem crt /etc/haproxy/keys/.pem& & & & #按照如上规则如果多个站点就可以使用同样的规则 bind :443 ssl crt $filepath crt $file2path crt $file3path& & & &
& & & & mode http& & & &
& & & & acl ssl& hdr_reg(host) -i ^(||)$& & & & redirect scheme https code 301 if !{ ssl_fc }& ssl& & & & #对以上站点进行https跳转& & & &
& & & & acl wwwtest_com hdr_reg(host) -i $(& & & & use_backend www_test_com if wwwtest_com { ssl_fc_sni
}& & & & #这里就是证书的对应部分,如& & & & acl admintest_com hdr_dom(host) -i & & & & use_backend admin_test_com if admintest_com { ssl_fc_sni
} & & & & acl passportabc_com hdr_dom(host) -i & & & & use_backend pasport_abc_com if passport_abc_com { ssl_fc_sni
& & & & backend www_test_com& & & & & & server test2 192.168.10.2:80 check port 80 inter 5000 rise 2 fall 3 weight 1& & & & backend admin_test_com& & & & & & server test4 192.168.10.4:80 check port 80 inter 5000 rise 2 fall 3 weight 1& & & & backend passport_abc_com& & & & & & server test5 192.168.10.5:80 check port 80 inter 5000 rise 2 fall 3 weight 1
按照以上配置就可以实现多证书的HTTPS,依次访问上面的访问会发现,相关的证书与之配对。
Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
Keepalived+HAProxy配置高可用负载均衡
6.3下Haproxy+Keepalived+Apache配置笔记
Haproxy + KeepAlived 实现WEB群集 on CentOS 6
Haproxy+Keepalived构建高可用负载均衡
使用 HAProxy 配置 HTTP 负载均衡器
HAproxy 的详细介绍:HAproxy 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (07月16日)
& (06月26日)
& (07月28日)
& (07月14日)
& (06月16日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款HAProxy 反向代理的使用 - 推酷
HAProxy 反向代理的使用
HAProxy 是一款高性能的反向代理软件,它可以基于四层或七层进行反向代理,尤其适合于高负载且需要进行七层处理的 Web 站点。
HAProxy 主要有 1.5,1.4 和 1.3 三个版本。CentOS 6 的 EPEL 源中已经加入了 HAProxy 的 RPM 包,因此安装 HAProxy 直接使用 yum 安装即可。
相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
HAproxy 主要借助于现代操作系统上几种常见的技术来实现性能的最大化。
单进程、事件驱动模型,降低了上下文切换和内存的开销
O(1) 时间检查器,允许其在高并发连接中对任何连接的时间实现即使探测。
单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,借助 splice() 系统调用,可以实现零复制转发。
树型存储,使用作者多年前开发的弹性二叉树,实现 O(log(N)) 的低开销
在生产环境中,通常将 HAProxy 作为七层负载均衡器,实现 Web 集群的负载均衡,动静分离等功能。
配置 HAProxy
HAProxy 的配置文件位于
/etc/haproxy/haproxy.cfg
。HAProxy 配置处理主要来源有三类:
命令行参数
配置端,用于设定全局配置参数
相关配置端,如
HAProxy 中,涉及时间单位的配置参数的默认后缀一般是毫秒,也可以使用 s(秒),m(分钟),h(小时),d(天)等单位
1. 全局配置
全局配置为
配置中的参数,有进程管理及安全相关的参数
chroot &DIR&
修改 HAProxy 的工作目录至指定的目录并在放弃权限之前执行 chroot() 操作,可以提升 haproxy 的安全级别
以守护进程方式运行
log &address& &facility& [max level [min level]]
定义日志位置
nbproc &NUMBER&
指定启动的 HAProxy 进程个数,默认启动一个进程,建议启动一个进程即可
指定以 UID 身份的用户运行 HAProxy
maxconn &NUMBER&
设定每个 HAProxy 进程所接受的最大并发连接数
spread-checks &0..50, inpercent&
在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长
设定每进程能够打开的最大文件描述符数,默认情况下棋会自动进行计算,不推荐手动设置
2. 代理配置
代理配置可在一下配置段中定义:
:用于为所有其它配置段提供默认参数
:用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接
:用于定义一系列后端服务器,代理将会将对应客户端的请求转发至这些服务器
: 通过关联前端和后端定义了一个完整的代理
2.1 前后端连接模型
在 HTTP 模式下,HAProxy 与前后端的连接方式取决于 frontend 和 backend 的连接选项。HAProxy 支持 5 中连接模型:
KAL: keep alive(
option http-keep-alive
),这是默认的模式,所有的请求和响应都会被 HAProxy 处理,且允许在没有请求和响应时保持空闲的连接
TUN:tunnel(
option http-tunnel
):这是 1.0 ~ 1.5-dev21 的默认模式,类似于隧道,HAProxy 仅处理第一个请求和响应,剩余的报文将直接转发而不进行处理。尽量不要使用这个模式,因为它在日志记录和 HTTP 处理上有很多问题。
PCL:passive close(
option httpclose
),这和 tunnel 模式类似,区别是 HAProxy 会在发往客户端的响应报文和发往服务器的请求报文中加入 &Connection: close& 首部,使得客户端和后端主机在完成与 HAProxy 的一次通信后主动的关闭连接。
SCL:server close(
option http-server-close
),HAProxy 在接收到后端服务器的响应后就立即断开与后端服务器的连接,而与客户端的连接则使用保持连接。
FCL:forced close(
option forceclose
),HAProxy 每完成一次与客户端/服务器的通信(请求+响应)后就主动关闭连接。
max-keep-alive-queue &value&
用于设定后端主机保持连接数的阈值,当某后端主机的保持连接队列超过此值后,HAProxy 会将向此主机请求的保持连接调度至其他主机。默认值 -1 表示不限制, 0 表示禁用保持连接。
2.2 负载均衡
balance &algorithm& [ &arguments& ]
定义负载均衡算法,可用于“defaults”、“listen” 和 “backend”。
用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。支持的算法有:
roundrobin:基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接
static-rr:基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制
leastconn:新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,可以在运行时调整其权重
source:将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性
uri:对URI的左半部分(&?&标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个URI的请求总是被派发至某特定的服务器,除非服务器的权重总数发生了变化;此算法常用于代理缓存或反病毒代理以提高缓存的命中率;需要注意的是,此算法仅应用于HTTP后端服务器场景;其默认为静态算法,不过也可以使用hash-type修改此特性
url_param:通过
为URL指定的参数在每个HTTP GET请求中将会被检索;如果找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相除后派发至某匹配的服务器;此算法可以通过追踪请求中的用户标识进而确保同一个用户ID的请求将被送往同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮叫算法对相应请求进行调度;此算法默认为静态的,不过其也可以使用hash-type修改此特性
):对于每个HTTP请求,通过
指定的HTTP首部将会被检索;如果相应的首部没有出现或其没有有效值,则使用轮叫算法对相应请求进行调度;其有一个可选选项“use_domain_only”,可在指定检索类似Host类的首部时仅计算域名部分(比如通过来说,仅计算magedu字符串的hash值)以降低hash算法的运算量;此算法默认为静态的,不过其也可以使用hash-type修改此特性
hash-type &method
用于定义将hash码映射至后端服务器的方法:
map-based:hash表是一个包含了所有在线服务器的静态数组。其hash值将会非常平滑,会将权重考虑在列,但其为静态方法,当一台服务器宕机或添加了一台新的服务器时,大多数连接将会被重新派发至一个与此前不同的服务器上,对于缓存服务器的工作场景来说,此方法不甚适用。
consistent:hash表是一个由各服务器填充而成的树状结构;基于hash键在hash树中查找相应的服务器时,最近的服务器将被选中。此方法是动态的,添加一个新的服务器时,仅会对一小部分请求产生影响,因此,尤其适用于后端服务器为cache的场景。
2.3 健康状态检查
option httpchk [method] [uri] [version]
默认情况下,HAProxy 的后端主机健康状态检查是基于 TCP 连接来检查的。当使用 option httpchk 后,将使用一个 HTTP 请求来检查后端主机健康状态,2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。
检查端口和间隔在 server 配置中指定。
backend https_relay
option httpchk OPTIONS * HTTP/1.1
server apache1 192.168.1.1:443 check port 80
http-check disable-on-404
使用此选项后,返回 HTTP 404 状态码的后端主机将会从负载均衡列表中移除,但是仍能够继续处理已建立的连接。这可以用于手动的平滑下限。如果服务器重新开始返回 2xx 或 3xx 的状态码,将会重新被加入至负载均衡主机列表。
http-check expect [!] &match& &pattern&
此选项用于对 HTTP 检查返回的页面进行内容匹配或返回状态码匹配
match 指定匹配方式,
表示精确匹配状态码,
表示使用正则表达式匹配状态码,
表示精确匹配响应实体字符串,
表示使用正则表达式匹配响应实体。同时还可以使用 &!& 表示取反,如 ! status,返回内容的大小受
tune.chksize
参数限制,默认为 16384 字节。
http-check expect ! string SQL Error
如果遇到 SQL Error 的页面测健康状态为故障
2.4 端口指定
bind [&address&]:&port_range& [, ...]
此指令仅能用于frontend和listen区段,用于定义一个或几个监听的套接字。
2.5 工作模式
mode {tcp | http | health}
设定实例的运行模式或协议。当实现内容交换时,前端和后端必须工作于同一种模式(一般说来都是HTTP模式),否则将无法启动实例。
2.6 指定后端主机
use_backend &backend& &if | unless& &condition&
用于指定匹配某
时使用的后端主机
default_backend &backend&
指定默认情况下的后端主机
use_backend
use_backend
url_css url_img extension_img
default_backend dynamic
server &name& &address&[:port] [param*]
为后端声明一个主机,不能用于 default 和 frontend 段
name:为此服务器指定的内部名称,其将出现在日志及警告信息中;如果设定了&http-send-server-name&,它还将被添加至发往此服务器的请求首部中
address:此服务器的地址
[:port]:指定将连接请求所发往的此服务器时的目标端口
[param]:为此服务器设定的一系参数,下面仅说明几个常用的参数:
backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server
check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定
cookie :为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能
maxconn:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放
maxqueue:设定请求队列的最大长度
observe:通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于http代理场景
weight:权重,默认为1,最大值为256,0表示不参与负载均衡
2.7 服务器状态输出
stats enable
开启状态输出页面
stats hide-version
隐藏 HAProxy 版本报告
stats realm
启用认证领域
stats auth &USER:PASSWORD&
认证的用户名和密码
stats uri URI
输出页面的 URI
listen status *:8080
stats enable
stats hide-version
/haproxy?stats
stats realm
HAProxy\ Statistics
stats auth
statsadmin:password
option httplog
启用记录HTTP请求、会话状态和计时器的功能
option logasap
启用或禁用提前将 HTTP 请求记入日志,而不等待 HTTP 报文传输完毕
option forwardfor
在发往服务器的请求中插入
X-Forwarded-For
首部用于记录客户端的 IP
2.9 ACL 访问控制
haproxy的ACL用于实现基于请求报文的首部、响应报文的内容或其它的环境状态信息来做出转发决策,这大大增强了其配置弹性。其配置法则通常分为两步,首先去定义ACL,即定义一个测试条件,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至某特定的后端。定义ACL的语法格式如下。
acl &aclname& &criterion& [flags] [operator] &value& ...
&aclname&:ACL名称,区分字符大小写,且其只能包含大小写字母、数字、-(连接线)、_(下划线)、.(点号)和:(冒号);haproxy中,acl可以重名,这可以把多个测试条件定义为一个共同的acl
&criterion&:测试标准,即对什么信息发起测试;测试方式可以由[flags]指定的标志进行调整;而有些测试标准也可以需要为其在&value&之前指定一个操作符[operator]
[flags]:目前haproxy的acl支持的标志位有3个:
-i:不区分&value&中模式字符的大小写
-f:从指定的文件中加载模式
--:标志符的强制结束标记,在模式中的字符串像标记符时使用
&value&:acl测试条件支持的值有以下四类:
- 整数或整数范围:如表示从;仅支持使用正整数(如果出现类似小数的标识,其为通常为版本测试),且支持使用的操作符有5个,分别为eq、ge、gt、le和lt
- 字符串:支持使用“-i”以忽略字符大小写,支持使用“\”进行转义,如果在模式首部出现了-i,可以在其之前使用“--”标志位
- 正则表达式:其机制类同字符串匹配
- IP地址及网络地址
常用的测试标准
be_sess_rate &integer&
用于测试指定的backend上会话创建的速率(即每秒创建的会话数)
backend dynamic
acl being_scanned be_sess_rate gt 50
redirect location /error_pages/denied.html if being_scanned
hdr(HEADER) &string&
用于匹配请求报文中的指定首部
method &string
用于匹配请求报文中使用的方法
path_beg &string&
用于测试请求的URL是否以 string 指定的模式开头
path_end &string&
用于测试请求的URL是否以 string 指定的模式结尾
path_reg &string&
用于测试请求的URL是否能以正则表达式 string 匹配
一个配置示例
127.0.0.1 local2
/var/lib/haproxy
/var/run/haproxy.pid
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
dontlognull
option http-server-close
option forwardfor
except 127.0.0.0/8
redispatch
timeout http-request 10s
timeout queue
timeout connect
timeout client
timeout server
timeout http-keep-alive 10s
timeout check
listen stats
bind 0.0.0.0:1080
stats enable
stats hide-version
/haproxyadmin?stats
stats realm
Haproxy\ Statistics
stats auth admin:admin
stats admin if TRUE
frontend http-in
log global
option httpclose
option logasap
option dontlognull
acl url_static
-i /static /images /javascript /stylesheets
acl url_static
-i .jpg .jpeg .gif .png .css .js
use_backend static_servers
if url_static
default_backend dynamic_servers
backend static_servers
balance roundrobin
server imgsrv1 172.16.200.7:80 check maxconn 6000
server imgsrv2 172.16.200.8:80 check maxconn 6000
backend dynamic_servers
cookie srv insert nocache
balance roundrobin
server websrv1 172.16.200.7:80 check maxconn 1000 cookie websrv1
server websrv2 172.16.200.8:80 check maxconn 1000 cookie websrv2
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 haproxy四层转发https 的文章

 

随机推荐