利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述

ngx_stream_return_module 提供了一个极简的指令:

return <value>;

在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601$remote_addr 等),无需任何上游后端即可快速响应。

二、典型应用场景

  1. 心跳与健康检查

    • 监控系统定期拨测 Nginx 端口,若返回预期字符串即视为“服务正常”。
  2. 调试与协议探测

    • 临时搭建一个测试端口,快速查看客户端发起连接所带信息(配合 $remote_addr$proxy_protocol_addr)。
  3. 统一版本或配置查询

    • 通过 $nginx_version、自定义静态文本,告知客户端当前网关版本或配置信息。
  4. 黑洞吸收

    • 对特定端口或 SNI,直接返回空或固定消息,拒绝后续业务流量。

三、指令语法

server {listen 12345;              # TCP/UDP 均可return <value>;
}
  • <value>

    • 文本:如 "pong\n"
    • 变量:如 $time_iso8601$remote_addr
    • 组合"${remote_addr} connected at ${time_local}\n"
  • 上下文:仅支持 stream { server { … } } 级别。

四、最小示例

  1. 返回当前 ISO 时间

    stream {server {listen 6000;return $time_iso8601 "\n";}
    }
    
    • 客户端连入后立刻收到 2025-06-10T12:34:56+02:00
  2. Echo 客户端 IP

    stream {server {listen 6001;return "Your IP: $remote_addr\n";}
    }
    
    • 便于诊断 NAT / PROXY 协议是否正确透传。
  3. 固定心跳响应

    stream {server {listen 6002 udp;return "HEARTBEAT_OK";}
    }
    
    • 监控系统可采用 UDP 探测,无需维护 TCP 连接。

五、高级组合

  • 条件返回(配合 map

    stream {map $remote_addr $resp {10.0.0.0/8  "INTERNAL\n";default    "EXTERNAL\n";}server {listen 7000;return $resp;}
    }
    

    根据源地址段动态返回不同内容。

  • SNI 健康(TLS 不解密,仅 HTTP/2 示例)

    stream {server {listen 443 ssl;ssl_preread on;return "ServerName: $ssl_preread_server_name\n";}
    }
    

    在 TLS 握手后返回客户端发来的 SNI。

六、注意事项

  1. 无异步或后端依赖

    • return 执行后即断开连接,不支持延迟或异步逻辑。
  2. 变量可用性

    • 仅在 Stream 层可用的变量才会解析,如 $remote_addr$proxy_protocol_addr$time_iso8601
  3. 返回长度限制

    • 推荐返回值不超过缓冲区大小(默认 16 KB),否则会被截断。
  4. 监控结合

    • 可在 access_log 中记录 "$remote_addr return=$resp_status",配合 Prometheus/Loki 采集。

七、结语

ngx_stream_return_module 是 Nginx Stream 层最轻量的应答利器,适合任何需要 “即连即回” 的场景:从心跳检测、健康探针,到快速调试、自定义协议探测,都能用极少配置快速落地。无需后端、无额外依赖,只需一行 return,即可让你的流量网关多一份“秒回”能力。

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

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

相关文章

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…

学习日记-day24-6.8

完成内容&#xff1a; 知识点&#xff1a; 1.网络编程_TCP编程 ### 编写客户端1.创建Socket对象,指明服务端的ip以及端口号 2.调用socket中的getOutputStream,往服务端发送请求 3.调用socket中的getInputStream,读取服务端响应回来的数据 4.关流public class Client {public…

JavaScript 核心对象深度解析:Math、Date 与 String

JavaScript 作为 Web 开发的核心语言&#xff0c;提供了丰富的内置对象来简化编程工作。本文将深入探讨三个重要的内置对象&#xff1a;Math、Date 和 String&#xff0c;通过详细的代码示例和综合案例帮助你全面掌握它们的用法。 一、Math 对象 Math 对象提供了一系列静态属…

HarmonyOS开发:设备管理使用详解

目录 前言 设备管理概述 设备管理组成 1、电量信息 &#xff08;1&#xff09;导入模块 &#xff08;2&#xff09;属性信息 &#xff08;3&#xff09;常用属性 &#xff08;4&#xff09;使用示例 2、设备信息 &#xff08;1&#xff09;导入模块 &#xff08;2&a…

el-select下拉框 添加 el-checkbox 多选框

效果 vue <el-select v-model"value" multiple style"width: 100%" popper-class"select-popover-class" placeholder"请选择试验项目"><el-option v-for"item in options" :key"item.value" :value&qu…

Memory Repair (三)

Top-Level Verification and Pattern Generation 本节涵盖 fuse box 编程、顶层 BISR&#xff08;内置自修复&#xff09;验证以及生产测试 pattern 的生成 Fuse Box Programming 通过 BISR controller 对 fuse box 进行编程的两种方法如下&#xff1a; • 采用 Autonomous mod…

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…

谷歌aab怎么转 apk

一、环境搭建&#xff1a; 1、搭建 java 环境&#xff1b;2、安装 AndroidStudio&#xff1b;3、下载 bundletool&#xff08;地址&#xff1a;Releases google/bundletool GitHub&#xff09;&#xff1b;4、确定本地有没有签名文件&#xff0c;mac电脑一般在/users/ 自己的…

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…

AWS EKS 集群日志上报观测云实践

AWS Lambda 介绍 AWS Lambda 是亚⻢逊提供的⼀种⽆服务器计算服务。它允许开发⼈员在⽆需管理服务器的情况下运⾏代码。AWS Lambda 基于事件驱动的模型&#xff0c;当触发指定的事件时&#xff0c;Lambda 会⾃动执⾏相应的代码逻辑。 Amazon CloudWatch 日志 CloudWatch 日志…

浏览器指纹科普 | 端口扫描保护是什么?

&#x1f50d; 什么是“端口”&#xff1f; 每台电脑都像一个办公大楼&#xff0c;端口就像是不同的房间号。不同软件&#xff08;比如浏览器、代理、远程控制工具&#xff09;会用不同的端口来“对外沟通”。 比如&#xff1a; 浏览网页可能用端口 80 或 443 用代理软件或某…

傲软录屏:轻松录制,高效分享

在数字内容创作和在线教育日益流行的今天&#xff0c;屏幕录制已成为许多人表达创意、分享知识的重要方式。无论是制作教学视频、记录游戏过程&#xff0c;还是进行远程会议记录&#xff0c;一款简单易用且功能强大的屏幕录制软件都是不可或缺的。傲软录屏正是这样一款能够满足…

小程序查广州楼盘网签数据和备案价(免费)

目录 一、网签数据/销控表查询二、备案价和不利因素查询三、如何体验 一、网签数据/销控表查询 二、备案价和不利因素查询 三、如何体验 #广州楼盘备案价查询 #网签数据查询 #广州买房必看攻略 #小程序查广州楼盘备案价

【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析

⭐本期内容&#xff1a;【HarmonyOS5】UIAbility组件生命周期详解&#xff1a;从创建到销毁的全景解析 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS&#xff1a;探索未来智能生态新纪元 文章目录 前言生命周期全景图详细状态解析与最佳实践&#x1f3ac; Create状态&#…

【云计算系统】云计算中的计算几何

一、云计算系统中的几何算法 云计算系统在资源调度、空间数据处理、安全加密及大规模优化等场景中广泛运用几何算法以提升效率与精度。 空间数据处理与索引算法 ​空间索引算法(R树、四叉树)​​ ​作用​:高效管理地理空间数据(如地图坐标、三维点云),支持快速范围查询…

基于物联网技术设计的设计室内宠物监护系统

目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结技术方案使用的模块的技术详情介绍预期成果总结 1. 项目开发背景 随着科技的不断进步&#xff0c;物联网&#xff08;IoT&#xff09;技术逐渐渗透到生活中的各个方面&#xff0c;尤其在智能家居领域&am…

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…

产品经理入门到精通:01需求调研

一、需求调研 1、需求&#xff1a;用户在某些方面需要得到某种帮助以达成目的。 2、调研&#xff1a;通过一些方法来了解某件事情的真相&#xff0c;也可以叫调查研究。 3、需求调研&#xff1a;通过观察、访谈和体验等方式&#xff0c;探究事物本质的过程。是需求诞生的开始…

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…

Android 应用开发概述与环境搭建指南

Android 应用开发概述与环境搭建指南 Android 应用开发概述与环境搭建指南一、Android 开发概述&#xff08;一&#xff09;Android 平台简介&#xff08;二&#xff09;Android 开发特点&#xff08;三&#xff09;开发语言与技术栈 二、开发环境搭建&#xff08;Windows 系统…