HAProxy 根据报文解析来定义不同的acl

1 .在 HAProxy 中使用 ACLs(Access Control Lists)检查 TCP 报文内容时,你可以使用 payload 关键字。以下是一个例子,演示如何在 HAProxy 的 ACL 中使用 payload

 
frontend my_frontendbind *:80mode tcpacl payload_hello req.payload(0,7) -m bin 68656c6c6f21acl payload_world req.payload(7,5) -m bin 776f726c64use_backend backend_hello if payload_hellouse_backend backend_world if payload_worldbackend backend_hellomode tcpserver server_hello 192.168.1.10:8080backend backend_worldmode tcpserver server_world 192.168.1.11:8080

在这个例子中:

  • acl is_hello payload(0,7) -m bin 68656c6c6f21 表示如果 TCP 报文的内容的前7个字节与二进制值 68656c6c6f21 匹配(即 "hello!" 的二进制表示),则定义了一个名为 is_hello 的 ACL。
  • tcp-request content accept if is_hello 表示如果 is_hello ACL 匹配,则接受此连接。
  • tcp-request content reject 表示如果没有

2. 在 HAProxy 中使用 ACL(Access Control List)来检查 JSON payload,你需要使用 payload 指令,并结合 base64converterstr 等关键词来处理 JSON 数据。以下是一个简单的例子,假设你的 JSON 数据被 Base64 编码:

# 定义一个 ACL 用于匹配 JSON payload
acl is_valid_json_payload req.payload(0,base64) -m reg \{.*"key":"value".*\}# 使用 ACL 进行条件判断
use_backend backend1 if is_valid_json_payload
use_backend backend2 if !is_valid_json_payload

在这个例子中:

  • req.payload(0,base64) 用于提取请求的 Base64 编码的 payload 数据。
  • -m reg \{.*"key":"value".*\} 用于使用正则表达式检查 payload 中是否包含特定的 JSON 键值对(在这个例子中,键是 "key",值是 "value")。

请注意,这只是一个简单的演示例子,实际中你可能需要根据你的 JSON 结构和匹配条件进行适当的调整。确保根据实际需要定义正确的 ACL 条件。

如果 JSON 数据没有被 Base64 编码,可以省略 base64 部分,直接使用 req.payload(0) 来提取未编码的 JSON 数据。

请注意,HAProxy 的 ACL 不是专门设计用于处理 JSON 数据的,而是一般用于 HTTP 请求的条件匹配。因此,复杂的 JSON 结构和条件可能需要更高级的工具或自定义解决方案。

3.在 HAProxy 中,你可以使用 ACL(Access Control List)来检查 JSON payload 是否不包含某个 key,并根据条件返回一个 JSON 串。以下是一个简单的示例,假设你希望在 JSON payload 中不包含 "key" 时返回一个特定的 JSON 串:

# 定义一个 ACL 用于检查 JSON payload 不包含特定的 key
acl json_does_not_contain_key req.payload(0) -m reg \{[^\}]*"key"[^\}]*\}# 使用 ACL 进行条件判断
http-response set-header Content-Type application/json if json_does_not_contain_key
http-response return 200 '{"message": "Key is missing"}' if json_does_not_contain_key

在这个例子中:

  • req.payload(0) 用于提取请求的未编码的 JSON payload 数据。
  • -m reg \{[^\}]*"key"[^\}]*\} 用于使用正则表达式检查 payload 中是否包含 "key"。如果不包含,ACL 将匹配。

接下来,通过 http-response set-header 设置返回的 HTTP 头,确保它表明返回的内容类型是 JSON。然后,使用 http-response return 返回一个自定义的 JSON 串。

请注意,这只是一个简单的演示例子,实际中你可能需要根据你的 JSON 结构和匹配条件进行适当的调整。确保根据实际需要定义正确的 ACL 条件和返回内容。

4.

在 HAProxy 中,对于 TCP 流量,你可以使用 tcp-request contentcontent 指令结合正则表达式来检查 JSON payload 是否不包含某个 key,然后返回一个 JSON 串。以下是一个简单的示例,假设你希望在 JSON payload 中不包含 "key" 时返回一个特定的 JSON 串

frontend your_frontendbind :80mode tcpoption tcplogtcp-request content reject if { req.payload(0,raw) -m reg \{[^\}]*"key"[^\}]*\} -m found }tcp-response content add Content-Type:\ application/json if !{ req.payload(0,raw) -m reg \{[^\}]*"key"[^\}]*\} -m found }tcp-response content add \{ "message": "Key is missing" \} if !{ req.payload(0,raw) -m reg \{[^\}]*"key"[^\}]*\} -m found }

在这个例子中:

  • req.payload(0,raw) 用于提取 TCP 请求的原始(未解码)payload 数据。
  • -m reg \{[^\}]*"key"[^\}]*\} 用于使用正则表达式检查 payload 中是否包含 "key"。如果不包含,ACL 将匹配。

然后,通过 tcp-response content 指令设置响应内容,包括 Content-Type 和返回的 JSON 串。

请注意,这只是一个简单的演示例子,实际中你可能需要根据你的 JSON 结构和匹配条件进行适当的调整。确保根据实际需要定义正确的条件和返回内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生cesium、mars3d、supermap-cesium在vue3+vite中引入

1. 原生cesium 需要下载 yarn add cesiumyarn add vite-plugin-cesium2. mars3d 需要下载 yarn add mars3d mars3d-cesiumyarn add vite-plugin-mars3d3. supermap-cesium 只需要引入官网下载的包,build文件夹下的cesium,以及项目中引入的其他cesiu…

【深度学习】PHP操作mysql数据库总结

一.PHP数据库的扩展分类 1.MySQL 扩展是针对 MySQL 4.1.3 或更早版本设计的,是 PHP 与 MySQL数据库交互的早期扩展。由于其不支持 MySQL 数据库服务器的新特性,且安全性差,在项目开发中不建议使用,可用 MySQLi 扩展代替。 2.MySQ…

Android BottomSheetBehavior(底部弹窗)

目录 一、BottomSheetBehavior 介绍 二、BottomSheetBehavior 基本使用 2.1 在 CoordinatorLayout 中添加底部工作表: 2.2 在代码中获取 BottomSheetBehavior 实例: 2.3 设置工作表的状态,如展开、折叠等 2.4 工作表的状态 三、Bottom…

嵌入式系统未来的发展趋势走向???

人工智能和机器学习应用 模型优化: 为了在资源有限的嵌入式系统上运行,将会看到更多的努力投入到精简、优化和量化模型,以适应边缘计算的环境。 边缘推理: 嵌入式设备将更多地执行本地推理,而不是将所有数据发送到云端…

Android原生 MQTT开发

一、引包 1.1.模块的build.gradle //mqtt框架implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0implementation org.eclipse.paho:org.eclipse.paho.android.service:1.1.1implementation org.bouncycastle:bcpkix-jdk15on:1.59 1.2 旧版AndroidStudio开…

【设计模式--行为型--命令模式】

设计模式--行为型--命令模式 命令模式定义结构案例优缺点使用场景 命令模式 定义 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储,传递,调用…

Springboot整合Redis实现消息发布订阅

一、前言 有时候在实际项目中,某些业务场景下我们需要使用消息的发布订阅功能,以实现某些特殊的需求,那么我们实际上可以有多种选择,比如使用常见的消息中间件Rabbitmq,Kafka,Activemq等,但这几…

Nodejs 第二十四章(zlib)

在 Node.js 中,zlib 模块提供了对数据压缩和解压缩的功能,以便在应用程序中减少数据的传输大小和提高性能。该模块支持多种压缩算法,包括 Deflate、Gzip 和 Raw Deflate。 zlib 模块的主要作用如下: 数据压缩:使用 z…

07--面向对象OOP--02

学习面向对象内容的三条主线 Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类面向对象的特征:封装、继承、多态、(抽象)其他关键字的使用:…

城轨线路列车时刻表与车站客流控制协同优化方法

文章信息 论文题目为《城轨线路列车时刻表与车站客流控制协同优化方法》,该文于2021年发表于《交通运输系统工程与信息》上。文章考虑换入客流影响下列车时刻表与客流控制的协同优化问题,以最小化乘车延误人数为目标,以列车时刻表、客流控制和…

前端成神之路-CSS基础选择器

前端成神之路-CSS基础选择器 目录 前端成神之路-CSS基础选择器 CSS选择器(重点) 1. CSS选择器作用(重点) 选择器的作用 2. CSS基础选择器 2.1 标签选择器 2.2 类选择器 2.3 类选择器特殊用法- 多类名 2.4 id选择器 id选…

java代码编写twitter授权登录

在上一篇内容已经介绍了怎么申请twitter开放的API接口。 下面介绍怎么通过twitter提供的API,进行授权登录功能。 开发者页面设置 首先在开发者页面开启“用户认证设置”,点击edit进行信息编辑。 我的授权登录是个网页,并且只需要进行简单的…

动物姿态估计:微调 YOLOv8 姿态模型

动物姿态估计是计算机视觉的一个研究领域,是人工智能的一个子领域,专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位(例如头部、四肢和尾巴)的空间排列。这项技术具有广泛的应用&#…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】边缘检测(附MATLAB代码实现)

目录 前言 知识储备 数字图像处理(Digital Image Processing) 数字图像处理基础知识与算法

子组件调用父组件的方法

在React中使用函数组件(也称为无状态组件)和Hooks时,你可以通过以下方式让子组件调用父组件的方法: 1. 使用回调函数(Callback Function) 这是最常见的方法。当子组件需要调用父组件的方法时,…

uniapp 单选按钮 选中默认设备

需求1:选中默认设备,113 和114 和139都可以选中一个默认设备 选中多个默认设备方法: async toSwitch(typeItem, title) {const res await this.setDefaultDev(typeItem.ibdr_devsn, typeItem.ibdr_pid)if (!res) {this.common.toast(切换默…

关于在Java中打印三角形图形的汇总

前面写过一些关于打印三角形图形代码的文章,这里进行了汇总,话不多说,直接上代码: /*** 关于打印三角形的汇总*/ public class Work1 {public static void main(String[] args) {int num 5;/** 打印如下图形:* ** …

OPCServer KEPServer安装和使用

OPCServer KEPServer安装和使用 简介 KEPServer软件是免费的,驱动收费,每天2小时试用时间, 免费用来模拟仿真是很不错的选择 OPC DA 和OPC UA都支持 中文官网地址: https://www.kepware.com/zh-cn/ 中文官方文档(经常有更新,其…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库? 随着数据量的急速上升,单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈,所以需要考虑拆分数据库,将数据库分布在不同实例上提升数据库可用性。主要的原因有如下: 磁盘存储。业务量剧增&…

Vite + React + tailwindcss + ts + 多Nodejs环境... 速搭

最近接触了前端代码,作为一个后端,能将其搭起来并用于生产,我感到很是欣慰。 本文纯安装速记与关键点记录,适合有一定经验且对前端React及生态有一些小了解,想要快速的将一个框架搭建起来的童鞋。可当成一个指引。 N…