10月31日 HAProxy

1、HAProxy功能

HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息

2、HAProxy组成

软件包:yum install haproxy
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
fronted:前端,相当于nginx, server {}
backend:后端,相当于nginx, upstream {}
listen:同时拥有前端和后端,适用于一对一环境,也就是前段和后端是一一对应的关系,只有一个端和一个后端

3、HAProxy反向代理httpd服务,并实现日志功能

10月31日 HAProxy_第1张图片
无标题.png

备注:以下的所有实验都是根据此拓扑图完成的

1、在后端的两个web服务器上开启httpd服务
2、配置haproxy
vim /etc/haproxy/haproxy.cfg
listen http
        bind :80
        balance roundrobin    ---指明调度算法为轮询
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
也可以写成如下格式,这种格式一个前段可以对应多个后端
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check weight 2   ---指定权重
        server web2 192.168.74.129:80 check 
systemctl start haproxy.service 
3、vim /etc/rsyslog.conf 
$ModLoad imudp
$UDPServerRun 514   ---开启udp的514端口,这样产生的日志就会发往本机的日志服务器
local2.*                                                /var/log/haproxy.log
systemctl restart rsyslog.service 
4、测试
在客户端curl 172.18.21.107    ---发现轮流的调度只后端的主机
在haproxy上tail -f /var/log/haproxy.log  ---发现有日志生成

4、global配置

vim /etc/haproxy/haproxy.cfg
Global settings
 log         127.0.0.1 local2   ---表示日志设施为local2,发送至本机的日志服务器,这里可以改成别的主机的地址,这样日志就会发送到别的主机上,当然要在别的主机上打开tcp或者udp的514端口,并在配置文件中规定日志的路径
    chroot      /var/lib/haproxy   ---
    pidfile     /var/run/haproxy.pid
    maxconn     4000   ----设定每个haproxy进程所能接受的最大并发连接数
    user        haproxy
    group       haproxy
    daemon   ---表示默认以守护进程的方式运行

5、代理配置段

代理配置段:

-defaults 
-frontend 
-backend 
-listen 
Frontend段:指定接收客户端连接侦听套接字设置
Backend段:指定将连接请求转发至后端服务器的相关设置
Listen段:指定完整的前后端设置,只对TCP 有效
proxy 名称:使用字母数字-_ . : 并区分字符大小写
配置参数:
bind:指定一个或多个前端侦听地址和端口
bind [
]: [, ...] [param*] 示例: listen http_proxy bind :80,:443 ---指监听在本地的80和443的所有ip地址 bind 10.0.0.1:10080,10.0.0.1:10443 ---监听在特定的ip地址

6、balance配置

  • 调度算法:
    roundrobin:基于权重轮询,动态算法,支持权重的运行时调整,支持慢启动,慢启动新加一个后端服务器后,逐渐的把一半的流量分配到新加的主机,而不是一下子就把流量分配过去,可能会造成后端服务器因为瞬间流量过大而死机;每个后端backend中最多支持4095个server
    static-rr:基于权重轮询,静态算法,不支持权重的运行时调整及慢启动;后端主机数量无上限
    leastconn:加权最少连接,动态算法,最少连接的后端服务器优先分配接收新连接,相同连接时轮询,推荐在较长会话的场景使用,例如MySQL、LDAP等,不适合http
    first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务
    source:源地址hash,新连接先按权重分配,后续连接按source分配请求
    uri:对URI的左半部分或整个uri做hash计算,并除以服务器总权重取模,以后派发至某挑出的服务器,适用于后端缓存服务器,以后只要访问同样的地址就给你调度到固定的后端服务器上去
    ://:@:/;?#
    左半部分:/;
    整个uri:/;?#
    url_param:对用户请求的uri部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server
    hdr():对于每个http请求,此处由指定的http首部将会被取出做hash计算;并由服务器总权重相除以后派发至某挑出的服务器;无有效值的会被轮询调度
    hdr(Cookie)
    rdp-cookie 远程桌面相关
    rdp-cookie()
  • 哈希算法
    hash-type
    method:
    map-based:除权取余法,哈希数据结构是静态数组
    consistent:一致性哈希,哈希数据结构是一棵树
    : 哈希函数
    sdbm djb2 wt6
    default_backend
    无use_backend匹配时,使用默认的backend,用于frontend中
    default-server [param*]
    为backend中的各server设定默认选项
示例1
vim /etc/haproxy/haproxy.cfg
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance uri    --指明调度方式为基于源uri,
        hash-type consistent    ---指明调度算法为一致性哈希
        server web1 192.168.74.133:80 check weight 2
        server web2 192.168.74.129:80 check
测试
访问 curl 172.18.21.107/1.html   ----访问固定的uri将始终被调度到第一次被调度的后端的主机,即使在后端两个主机上都有1.html
示例2
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance hdr(host)       ---表示请求的首部也就是host不一样,就会调度到不同的主机
        hash-type consistent
        server web1 192.168.74.133:80 check 
        server web2 192.168.74.129:80 check
在haproxy上再配置一个172.18.21.77/16的ip地址
在客户端测试
[root@node2 ~]#curl 172.18.21.77
welcome 106 
[root@node2 ~]#curl 172.18.21.107   ---发现请求的ip地址不同,将会调度到不同的后端服务器

welcome to 107

示例3 frontend http bind :80 default_backend websrvs backend websrvs balance roundrobin default-server weight 3 ---表示不指定权重的情况下默认权重为3 server web1 192.168.74.133:80 check weight 1 server web2 192.168.74.129:80 check 测试 for i in {1..20};do curl 172.18.21.107;done

7、定义后端主机的各服务器及其选项

server  
[:port] [param*] default-server [param*] :服务器在haproxy上的内部名称;出现在日志及警告信息
:服务器地址,支持使用主机名 [:[port]]:支持端口映射,访问本机的80端口,可以调度到后端的8080端口;省略时,表示同bind中绑定的端口 [param*]:参数 weight :权重,默认为1 maxconn :当前server的最大并发连接数,只的是后端服务器的最大并发连接数 backlog :当server的连接数达到上限后的后援队列长度 backup:设定当前server为备用服务器

8、健康状态检测

check:对当前server做健康状态检测,只用于四层检测
注意:httpchk,“smtpchk”, “mysql-check”, “pgsql-check” and “ssl-hello-chk” 用于定义应用层检测方法
addr:检测时使用的IP地址,可以实现后端的服务器检测时使用一个ip地址,提供服务使用另外一个ip地址,使流量分流,提高效率
port :针对此端口进行检测
inter :连续两次检测之间的时间间隔,默认为2000ms
rise :连续多少次检测结果为“成功”才标记服务器为可用;默认为2
fall :连续多少次检测结果为“失败”才标记服务器为不可用;默认为3
cookie :为当前server指定cookie值,实现基于cookie的会话黏性
disabled:标记为不可用
redir:将发往此server的所有GET和HEAD类的请求重定向至指定的URL

示例1
在后端的192.168.74.133的主机上再配置一个IP地址
ip addr add 192.168.74.88/24 dev eth1  
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check  addr 192.168.74.88 port 80 inter 3000 rise 3 fal
l 3    ---指定检测时监控后端的服务器的ip地址为192.168.74.88,端口为80
        server web2 192.168.74.129:80 check disabled  --标记为此台服务器不可用
测试
curl 172.18.21.107    ---发现只能调度至后端的一台服务器
将新增加的ip地址删除ip addr del 192.168.74.88/24 dev eth1
再curl 172.18.21.107 ---发现后端服务器都不可用了。因为一个是标记为不可用,一个虽然是好的,但检测的ip地址没有了,就会认为后端的服务器坏了
示例2
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check redir http://www.baidu.com    ---表示将发往此server的所有GET和HEAD类的请求重定向至百度
测试 
在浏览器上http://172.18.21.107/   
或者用curl -L 172.18.21.107 ---用curl命令时不加-L无法看到重定向的内容

9、cookie配置

cookie [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain ]* [ maxidle ] [ maxlife ]
:cookie名称,用于实现持久连接
rewrite:重写
insert:插入
prefix:前缀

示例基于cookie的session sticky的实现
frontend http
        bind :80
        default_backend websrvs
backend websrvs
        balance roundrobin
        cookie WEBSRV insert nocache indirect  ----WEBSRV相当于一个变量,值由srv1和srv2决定, insert把cookie信息添加到响应报文首部,nocache不是不缓存,这样在浏览器的响应报文里会看到一个cookie值,下次浏览器再访问时就带着这个cookie值就被调度到相应的主机
        server web1 192.168.74.133:80 weight 1 check rise 3 fall 3 maxconn 3000 cookie srv1
        server web2 192.168.74.129:80 check weight 2 check rise 3 fall 3 maxconn 3000 cookie srv2
systemctl restart haproxy
测试
[root@node2 ~]#curl  172.18.21.107 -I
HTTP/1.1 200 OK
Date: Wed, 06 Sep 2017 04:45:45 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 03 Sep 2017 22:11:15 GMT
ETag: "220661-16-5585045d37040"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
Set-Cookie: WEBSRV=srv1; path=/   ---可以看到发给客户端的cookie是WEBSRV=srv1
Cache-control: private
[root@node2 ~]#curl -b WEBSRV=srv1 172.18.21.107
welcome 106    ---当这个客户端端待着这个cookie值去访问时就会调度到固定的主机
[root@node2 ~]#curl -b WEBSRV=srv1 172.18.21.107  ---curl命令默认是不携带cookie的,要想携带cookie就要加-b选项
welcome 106 

在火狐浏览器上访问时,按F12进入调试页面也可以看到,第一次访问时响应报文里会有一个cookie值,这样浏览器下次访问时就会带着这个cookie值,从而被调度到固定的主机

10月31日 HAProxy_第2张图片
QQ截图20171031230559.png

10、统计接口启用相关的参数

stats enable
启用统计页;基于默认的参数启用stats page
-stats uri: /haproxy?statsuri默认值
-stats realm : HAProxy\Statistics
-stats auth: no authentication
stats uri
自定义stats page uri
stats auth :
认证时的账号和密码,可使用多次
stats realm
认证时的realm
stats hide-version
隐藏版本
stats refresh
设定自动刷新时间间隔
stats admin { if | unless }
启用stats page中的管理功能
示例

frontend http
        bind :80
        stats enable
        stats refresh 10    ---定义刷新间隔为10s
        stats uri /hastats   ---自定义统计页面
        stats realm "haproxy info"    ---输入账号和密码时的提示信息
        stats auth ha1:centos    ---设定账号和密码
        stats auth ha2:centos
        stats hide-version   ---在网页上打开时会隐藏版本信息
        stats admin if TRUE   --启用管理功能,在网页上就可以实现操作把后端的某个服务器down掉
        default_backend websrvs
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 weight 1 check rise 3 fall 3 maxconn 3000
        server web2 192.168.74.129:80 check weight 2 check rise 3 fall 3 maxconn 3000

11、工作模式

maxconn :为指定的frontend定义其最大并发连接数;默认为2000
mode { tcp|http|health}
定义haproxy的工作模式
tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议,https时使用此模式,默认模式
http:仅当代理协议为http时使用,centos实际默认模式
health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接,较少使用
TCP模式的健康状态检测示例

listen ssh
        bind 192.168.74.107:22   ---做这一步之前先把ssh服务的监听地址改为172.18.21.107,也就是外网网卡的IP地址监听22端口。这样内网网卡的ip地址的22端口就腾出来给haproxy使用
        mode tcp   ---一定要定义为tcp模式
        balance leastconn
        server ssh1 192.168.74.133:22 check
        server ssh2 192.168.74.129:22 check

12、健康状态检测

对后端服务器做http协议的健康状态检测:
option httpchk默认为:/ OPTIONS HTTP/1.0
option httpchk
option httpchk
option httpchk
定义基于http协议的7层健康状态检测机制http-check expect [!]
http协议健康状态检测响应内容或指定响应码

frontend http
        bind :80
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
        default_backend websrvs
backend websrvs
        balance roundrobin
        option httpchk GET /index.html HTTP/1.1\r\nhost:  ---对后端服务器做http协议的健康状态检测,在后端服务器的日志中可以看到定期的发送http协议,默认为:OPTIONS / HTTP/1.0" 200 ,也可以自己定义为GET /index.html HTTP/1.1
        option httpchk /index.html  ---指定监控后端主机的哪个uri
        http-check expect status 200  ---表示只有返回200的状态码才认为后端的服务器是好的
        server web1 192.168.74.133:80 weight 1 check rise 3 fall 3 maxconn 3000
        server web2 192.168.74.129:80  weight 2 check rise 3 fall 3 maxconn 3000

13、forwardfor配置

option forwardfor[ except ] [ header ] [ if-none ]
在由haproxy发往后端主机的请求报文中添加“X-Forwarded-For”首部,其值为前端客户端的地址;用于向后端主发送真实的客户端IP
[ except ]:请求报文来自此处指定的网络时不予添加此首部,如haproxy自身所在网络
[ header ]:使用自定义的首部名称,而非“X-Forwarded-For”
[ if-none ]如果没有首部才添加首部,如果有使用默认值
示例

在default语句块里定义一个首部信息
vim /etc/haproxy/haproxy.cfg 
option forwardfor       except 127.0.0.0/8 header x-client   ---如果不加header x-client,默认添加的首部是X-Forwarded-For,这样在后端的日志格式中增加的首部不是x-client而是X-Forwarded-For
在后端主机的httpd的配置中日志格式要增加这个首部
vim /etc/httpd/conf/httpd.conf 
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{x-client}i" combined
测试在客户端访问curl 172.18.21.107
在后端服务器上监控日志
tail /var/log/httpd/access_log -f   --可以看到真实客户端地址了

14、错误页配置

errorfile 自定义错误页
:HTTP status code,支持200, 400, 403, 408, 500, 502, 503, 504,:错误页文件路径
errorlo c
相当于errorloc 302 ,利用302重定向至指URL
示例1

cd /etc/haproxy
mkdir error_pages
echo custom ERROR 503 > error_pages/503.html
frontend  http
        bind :80
        default_backend websrvs
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
        errorfile 503 /etc/haproxy/error_pages/503.html
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
systemctl reload haproxy.service 
测试的时候把后端的两个web服务器都停掉
[root@centos6 ~]#curl  172.18.21.107   ---这样访问的时候就会显示错误页面了
custom ERROR 503
示例2
frontend  http
        bind :80
        default_backend websrvs
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
        errorloc 503 http://www.baidu.com   ---表示出现错误页面就重定向到百度
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
测试:关闭后端的两个httpd服务
curl -L 172.18.21.107   ---发现跳转至百度了

15、修改报文首部
reqadd [{if | unless} ]
在请求报文尾部添加指定首部
rspadd [{if | unless} ]
在响应报文尾部添加指定首部
示例:rspadd X-Via:\ HAPorxy
reqdel [{if | unless} ]
reqidel [{if | unless} ] (ignore case) 不分大小写
从请求报文中删除匹配正则表达式的首部
rspdel [{if | unless} ]
rspidel [{if | unless} ] (ignore case) 不分大小写
从响应报文中删除匹配正则表达式的首部
示例1

在haproxy上的设置
frontend  http
        bind :80
        default_backend websrvs
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
        reqadd x-via:\ haproxy107    ---在请求报文的尾部添加一个首部的值为haproxy107
        rspadd server:\ zhanginx   ---添加一个新的服务器的类型
        rspidel server.*    ---删除响应报文中服务器的类型
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
systemctl reload haproxy.service
在后端服务器上设置
vim /etc/httpd/conf/httpd.conf 
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{x-via}i" combined    ---添加这个首部
service httpd restart
测试
curl 172.18.21.107
tail -f /var/log/httpd/access_log  ---可以看到haproxy107
[root@centos6 network-scripts]#curl -I 172.18.21.107
HTTP/1.1 200 OK
Date: Thu, 02 Nov 2017 02:31:23 GMT
Last-Modified: Wed, 01 Nov 2017 23:11:04 GMT
ETag: "220660-20-55cf3fc63fd87"
Accept-Ranges: bytes
Content-Length: 32
Content-Type: text/html; charset=UTF-8
server: zhanginx     ---发现原来的被删除了,新增加了一个,这样可以伪装后端服务器的类型

16、连接超时

timeout client 
客户端最长空闲连接超时时长默认单位是毫秒
timeout server 
后端服务器最长空闲连接超时时长
timeout http-keep-alive 
持久连接的持久时长
timeout http-request 
一次完整的HTTP请求的最大等待时长
timeout connect 
成功连接后端服务器的最大等待时长
timeout client-fin 
客户端半连接的空闲时长,半连接就是分手包的时候,我和你分手,你却不同分手的连接
timeout server-fin 
后端服务器半连接的空闲时长

17、haproxy的ACL

示例1

frontend  http
        bind :80
        default_backend websrvs
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
       acl invalid_src src 172.18.21.106
        acl deny_port dst_port 80
        block if invalid_src deny_port    ---表示满足上面两个条件都要满足才被拒绝,是并且的关系,||是或者的关系,!表示非
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
systemctl reload haproxy.service 

示例2

 acl adminpath path_beg -i /admin    ---表示访问的uri以admin开头的就拒绝
        block if adminpath

示例3基于acl实现动静分离

在后端主机192.168.74.129上安装php,并重新启动httpd服务
yum install php
systemctl restart httpd
vim /var/www/html/index.php

在后端主机192.168.74.133上
mkdir static
cd static/
cp /usr/share/doc/db4-devel-4.7.25/gsg_txn/CXX/writeblock.jpg a.jpg
在haproxy上的设置
vim /etc/haproxy/haproxy.cfg 
listen stats
        bind :9527
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
frontend  http
        bind :80
        acl url_static path_beg -i /static /images /javascript  
        acl url_static path_end -i .jpg .gif.png .css .js .html .txt .
htm   ---以上两条定义了静态文件的acl
        use_backend staticsrvs if url_static   ---表示如果访问的是静态页面就用后端的staticsrvs中规定的服务器
        default_backend appsrvs  ---访问其他的就默认用后端的appsrvs
backend staticsrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
backend appsrvs
        server web2 192.168.74.129:80 check
systemctl reload haproxy.service
在网页上测试
http://172.18.21.107/static/a.jpg
http://172.18.21.107/index.php

示例4实现不同的域调度到不同服务器

listen stats
        bind :9527
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
frontend  http
        bind :80
        acl imagehost hdr(host) images.magedu.com   ---表示在请求报文中添加一个首部host,host就是主机名,值为images.magedu.com时就访问staticsrvs
        use_backend staticsrvs if imagehost
        default_backend appsrvs
backend staticsrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
backend appsrvs
        server web2 192.168.74.129:80 check
测试
vim /etc/hosts
172.18.21.107 images.magedu.com
[root@centos6 network-scripts]#curl images.magedu.com
welcome to centos 6.9 

示例5

acl deny_method method HEAD
block if deny_method   ---表示用客户端用HEAD方法就拒绝
http_request deny if deny_method   ---也可以用这种写法
测试
[root@centos6 network-scripts]#curl 172.18.21.107 -I
HTTP/1.0 403 Forbidden
Cache-Control: no-cache
Connection: close
Content-Type: text/html
[root@centos6 network-scripts]#curl 172.18.21.107

welcome to cenots7.4

18、配置HAProxy支持https协议

1 、支持ssl会话;
bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE
crt后证书文件为PEM格式,且同时包含证书和所有私钥
cat demo.crt demo.key> demo.pem
2、 把80端口的请求重向定443
bind *:80
redirect scheme https if !{ ssl_fc}
3、 向后端传递用户请求的协议和端口(frontend或backend)
http-request set-header X-Forwarded-Port %[dst_port] ---添加端口
http-request add-header X-Forwared-Proto https if { ssl_fc} ---添加https协议
支持https指的是客户端访问haproxy时使用https协议,因为这一段一般是外网,而haproxy访问后端的web服务器时不用https,因为这一段一般都是内网
示例

cd /etc/pki/tls/certs/
make haproxy.pem
vim /etc/haproxy/haproxy.cfg 
listen stats
        bind :9527
        stats enable
        stats refresh 10
        stats uri /hastats
        stats admin if TRUE
frontend  https
        bind 172.18.21.107:443 ssl crt /etc/pki/tls/certs/haproxy.pem
        redirect scheme https if !{ ssl-fc }     ---表示如果访问的是http就自动跳转至https,注意大括号里面前后都要有空格
        http-request set-header httpsrvport %[dst_port]
        default_backend websrvs
backend websrvs
        balance roundrobin
        server web1 192.168.74.133:80 check
        server web2 192.168.74.129:80 check
systemctl reload haproxy.service 
在后端的web服务器上的操作
vim /etc/httpd/conf/httpd.conf 
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{httpsrvport}i" combined   ---在日志格式中添加httpsrvport首部
在客户端测试
[root@centos6 network-scripts]#curl 172.18.21.107 -Lk
welcome to centos 6.9    --k表示忽略证书,-L表示跟踪重定向
[root@centos6 network-scripts]#curl -k https://172.18.21.107
welcome to centos 6.9 
[root@centos6 static]#tail -f /var/log/httpd/access_log    ---后端的web服务器上可以看到日志中含有客户端请求的端口443
192.168.74.132 - - [02/Nov/2017:14:05:26 +0800] "GET / HTTP/1.1" 200 32 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" 443

你可能感兴趣的:(10月31日 HAProxy)