论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
运维.售后
›
运维.售后
›
haproxy高级功能及设置
haproxy高级功能及设置
玛卡巴卡的卡巴卡玛
论坛元老
|
2024-8-19 14:49:07
|
显示全部楼层
|
阅读模式
楼主
主题
1011
|
帖子
1011
|
积分
3033
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
章节
一、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 5 weight 1
server web2 192.168.239.20:80 cookie lee2 check inter 2 fall 3 rise 5 weight 1
server web3_sorry 192.168.239.100:8080 backup
复制代码
1.2 验证cookie信息
1.2.1 Windows浏览器验证
点击革新一直都是同一个网页内容证实实现结果乐成
1.2.2 Linux下虚拟机验证
[root@localhost ~]# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee2 192.168.239.100
this is web2
[root@localhost ~]# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
[root@localhost ~]# curl -b WEBCOOKIE=lee1 192.168.239.100
this is web1
[root@localhost ~]# curl -b WEBCOOKIE=lee1 192.168.239.100
复制代码
2 IP透传
web服务器中需要记录客户端的真实IP地点,用于做访问统计、安全防护、行为分析、区域排行等场景。
2.1 四层与七层透传的区别
layer 4 与 layer 7
四层:IP+PORT转发
七层:协议+内容互换
四层负载
在四层负载设备中,把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 选项
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
2.2.2 修改web服务端的日志格式
修改NGINX支持的日志格式
[root@web1 ~]# vim /etc/nginx/nginx.conf
web1服务器设置文件中增加下列参数(NGINX)
[root@web1 ~]# systemctl restart nginx
客户端测试
查看NGINX的访问日志
web2服务器设置文件中增加下列参数(apache)
[root@web2 ~]# systemctl restart httpd
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 5 weight 1
server web2 192.168.239.20:80 check inter 2 fall 3 rise 5 weight 1
#nginx配置:添加变量proxy_protocol_addr 记录透传过来的客户端IP
http {
log_format main '$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)上查看访问日志
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
玛卡巴卡的卡巴卡玛
论坛元老
这个人很懒什么都没写!
楼主热帖
SQL SERVER事务提交回滚
Kubernetes(k8s)Deployment、Statefu ...
基于STM32的手势识别检测
【C++】ZZ1864- 解题精讲
ConcurrentHashMap源码,看我这篇就够 ...
一文读懂,硬核 Apache DolphinSchedul ...
数据类型的内置方法
同事写了一个责任链模式,bug 无数... ...
实用五步法教会你指标体系的设计与加工 ...
如何用技术改变生活
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
IOS
分布式数据库
鸿蒙
数据仓库与分析
linux
SAP
快速回复
返回顶部
返回列表