玛卡巴卡的卡巴卡玛 发表于 2024-8-19 14:49:07

haproxy高级功能及设置

章节
一、haproxy 底子用法

二、haproxy 高级用法

三、haproxy之ACL的利用

目录
1 基于cookie的会话保持

1.1 cookie命名,并赋予其值

1.2 验证cookie信息

1.2.1 Windows浏览器验证

1.2.2 Linux下虚拟机验证

2 IP透传

2.1 四层与七层透传的区别

2.2 七层IP透传

2.2.1 增加 forwardfor 选项

2.2.2 修改web服务端的日志格式

2.3 四层透传
1 基于cookie的会话保持

cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地点 hash 调理算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式利用较少, 已经被session共享服务器代替
1.1 cookie命名,并赋予其值

注意:不支持 tcp mode,利用 http mode
listen webcluster
    bind *:80
    mode http                      #不支持 tcp mode
    balance roundrobin
# insert:表示在响应头中插入一个新的 cookie。
# nocache:表示禁用缓存,防止浏览器缓存 cookie。
# indirect:表示使用间接方式来保存会话关联的服务器信息,而不是直接在 cookie 中保存服务器名称。
    cookie WEBCOOKIE insert nocache indirect
    server web1 192.168.239.10:80 cookie lee1 check inter 2 fall 3 rise 5weight 1
    server web2 192.168.239.20:80 cookie lee2 check inter 2 fall 3 rise 5weight 1
    server web3_sorry 192.168.239.100:8080 backup https://i-blog.csdnimg.cn/direct/eadd187561da4861a91565a0f8589f62.png

1.2 验证cookie信息

1.2.1 Windows浏览器验证

点击革新一直都是同一个网页内容证实实现结果乐成
https://i-blog.csdnimg.cn/direct/6e54365e25644ba88f266e59932c6ac6.png

1.2.2 Linux下虚拟机验证

# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
# curl -b WEBCOOKIE=lee1 192.168.239.100

2 IP透传

web服务器中需要记录客户端的真实IP地点,用于做访问统计、安全防护、行为分析、区域排行等场景。
2.1 四层与七层透传的区别

layer 4 与 layer 7
四层:IP+PORT转发
七层:协议+内容互换

https://i-blog.csdnimg.cn/direct/4493cd09c15d467ebf5865a316b7f47f.png

四层负载
在四层负载设备中,把client发送的报文目标地点(原来是负载均衡设备的IP地点),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地点,这样client就可以直接跟此服务器建立TCP连接并发送数据,而四层负载自身不参与建立连接,而和LVS不同,haproxy是伪四层负载均衡,因为haproxy 需要分别和前端客户端及后端服务器建立连接
七层署理
七层负载均衡服务器起了一个反向署理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了署理服务器的作用,七层署理需要和Client和后端服务器分别建立连接


2.2 七层IP透传

当haproxy工作在七层的时候,如何透传客户端真实IP至后端服务器
HAProxy设置
在由haproxy发往后端主机的请求报文中添加“X-Forwarded-For”首部,其值为前端客户端的地点;用于向后端主发送真实的客户端IP
option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
[ except <network> ]:请求报请来自此处指定的网络时不予添加此首部,如haproxy自身所在网络
[ header <name> ]:使用自定义的首部名称,而非“X-Forwarded-For”,示例:X-client
[ if-none ]如果没有首部才添加首部,如果有使用默认值 范例:
2.2.1 增加 forwardfor 选项

# vim /etc/haproxy/haproxy.cfg
https://i-blog.csdnimg.cn/direct/5938fc564c9e4a07a74b1947329e607b.png

2.2.2 修改web服务端的日志格式

修改NGINX支持的日志格式
# vim /etc/nginx/nginx.conf
web1服务器设置文件中增加下列参数(NGINX)
https://i-blog.csdnimg.cn/direct/58f44601dfb24b33b6f947c9a50c1f67.png
# systemctl restart nginx
客户端测试
https://i-blog.csdnimg.cn/direct/5c5aca13830f4a65b813a78dc8d26f75.png
查看NGINX的访问日志
https://i-blog.csdnimg.cn/direct/3b000cb7b8424c7587a8562e9867b6cc.png

web2服务器设置文件中增加下列参数(apache)
https://i-blog.csdnimg.cn/direct/a5aad06d8f7c4118958e813ac2f5d145.png
# systemctl restart httpd
https://i-blog.csdnimg.cn/direct/0bb6689f95a5471a8f385db9d2033d2d.png

2.3 四层透传

修改mode 为tcp
在NGINX设置内添加变量proxy_protocol_addr 记录透传过来的客户端IP,并启用proxy_protocol署理功能
#haproxy 配置:
listen webcluster
    bind *:80
    mode tcp
    balance roundrobin
    server web1 192.168.239.10:80 send-proxy check inter 2 fall 3 rise 5weight 1
    server web2 192.168.239.20:80check inter 2 fall 3 rise 5weight 1

#nginx配置:添加变量proxy_protocol_addr 记录透传过来的客户端IP
http {
    log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
                      '"$proxy_protocol_addr"'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
       server {
            listen       80 proxy_protocol; #启用此项,将无法直接访问此网站,只能通过四层代理访问
            server_name 192.168.239.10; web1(NGINX)上查看访问日志
https://i-blog.csdnimg.cn/direct/79801d263f844dccbf03d6bbab994dc2.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: haproxy高级功能及设置