Nginx - 实现 TCP/DUP流量的按 IP 动态转发

文章目录

  • 需求
    • 背景
    • 需求目标:
    • 使用场景:
    • 成功标准:
    • 技术要求:
  • Ng配置
  • 测试验证

在这里插入图片描述


需求

Nginx Stream TCP 协议按 IP 转发

背景

为了优化网络性能和提升服务的可用性,我们需要在 Nginx 中配置 stream 模块,使其根据客户端的 IP地址TCP 请求 动态转发到不同的后端服务器节点。此需求适用于场景如数据库代理(如 MySQL)、TCP 服务负载均衡、以及地域或来源IP分流的流量调度。


需求目标:

  1. 按客户端 IP 路由

    • 系统需根据客户端的来源 IP,将 TCP 请求智能地转发到指定的后端服务器节点。
    • 支持自定义 IP 段或单个 IP 的匹配规则。
  2. 后端节点配置

    • 后端服务器节点可能为多台,并且每个节点对应不同的业务数据或服务端口。
    • 默认情况下,如果 IP 未匹配任何指定规则,需将请求转发到预设的默认节点。
  3. 负载均衡与健康检查(可选)

    • 每个后端节点需要支持健康检查机制,当某个节点不可用时自动切换到其他节点。
    • 系统应具有一定的容错能力,避免单点故障影响整体服务。
  4. 日志与监控

    • Nginx 需记录所有连接的来源 IP 及其转发的后端服务器节点,支持日志分析与故障排查。
    • 系统需兼容现有的日志采集与监控平台,实现对转发情况的实时监控。
  5. 可扩展性

    • 配置应支持动态扩展,即可在不重启 Nginx 的情况下更新 IP 路由规则或后端节点。
    • 后端节点可根据业务需求随时增加或减少。

使用场景:

  1. 数据库代理:根据客户端所在的网络段,将数据库查询请求分发到不同的数据中心。
  2. TCP 业务调度:如按地域 IP 将 TCP 连接转发到最近的服务器节点,提升访问速度。
  3. 安全过滤:部分高风险 IP 或网络段的请求可路由到专用节点进行安全处理。

成功标准:

  • 按 IP 匹配的请求能正确转发到目标后端服务器。
  • 未匹配的请求能转发到默认节点,且整体服务稳定。
  • 后端服务器节点状态异常时,能自动切换到其他可用节点。

技术要求:

  • 使用 Nginx 的 stream 模块 实现 TCP 转发。
  • 支持 TCP 协议的端口监听和请求代理。
  • 后续可能扩展到 UDP 支持,因此设计应考虑模块化和扩展性。

Ng配置

stream {
  upstream socket_proxy1  {
       hash $remote_addr consistent;
       # 转发的目的地址和端口
       server 20.100.105.172:6789;
      }
	  
 upstream socket_proxy2  {
       hash $remote_addr consistent;
       # 转发的目的地址和端口
       server 20.100.105.250:6789;
      }
	  
  map $remote_addr $socket_proxy  {
		20.101.106.69 socket_proxy1; # 或者是 CIDR格式的IP段
		20.101.106.68 socket_proxy2;
		default socket_proxy2; # 默认转发的节点
  }

  server {
        listen 4321;
        proxy_connect_timeout 600s;
        proxy_timeout 600s;
		#动态选择后端节点
        proxy_pass $socket_proxy;
       }
  log_format detailed '$remote_addr [$time_local] '
                        '$protocol $status $bytes_sent $bytes_received '
                        '$session_time $upstream_addr '
                        '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
  map $time_iso8601 $logdate {
    default 'date-not-found';
    '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
    }
  access_log logs/stream-access-$logdate.log detailed;
}
  • stream 块:用于处理基于 TCP 或 UDP 的流量。
  • upstream:定义了不同的后端服务器组。
  • map 指令:根据客户端的 IP地址,将请求映射到不同的后端组。
  • server:定义一个 TCP 端口监听服务,并将连接动态转发给对应的后端

在完成配置后,使用以下命令验证 Nginx 配置是否正确:

nginx -t

重新加载 Nginx 服务

nginx -s reload

测试验证

  • 使用客户端工具(如 telnet 或 nc)从指定 IP 进行连接。
  • 从stream的日志中确认请求是否正确转发到对应的后端服务器。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣题解(鸡蛋掉落)

887. 鸡蛋掉落 已解答 困难 相关标签 相关企业 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它…

字节 HLLM 论文阅读

github连接&#xff1a;https://github.com/bytedance/HLLM 探讨问题&#xff1a; 推荐LLM的三个关键问题&#xff1a; LLM预训练权重通常被认为是对世界知识的概括&#xff0c;其对于推荐系统的价值&#xff1f;对推荐任务进行微调的必要性&#xff1f;LLM是否可以在推荐系统…

如何分离人声和背景音乐?精准音频分离,提升你的作品质量

在音频编辑和处理的领域中&#xff0c;分离人声和背景音乐是一项颇具挑战的任务&#xff0c;但也是众多音频爱好者和专业人士经常面临的需求。无论是为了制作卡拉OK伴奏、提升视频制作质量&#xff0c;还是进行音乐分析和研究&#xff0c;掌握人声与背景音乐的分离技术都显得至…

Winform和WPF的技术对比

WinForms&#xff08;Windows Forms&#xff09;和WPF&#xff08;Windows Presentation Foundation&#xff09;是用于创建桌面应用程序的两种技术。尽管两者都可以用于开发功能强大的Windows应用程序&#xff0c;但它们的设计理念、功能和开发体验都有显著区别。在本文中&…

如何将csdn文章导出为pdf

前言 在csdn上浏览文章的时候我发现有的文章支持pdf导出&#xff0c;但是有的文章不支持pdf导出&#xff0c;为了解决能将csdn上所有文章都能以pdf格式导出遂作此文。 正文 先上代码&#xff1a; (function(){use strict;var contentBox $("div.article_content")…

05 P1157 组合的输出

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; # define M 500 #include<algorithm>int sa[100005],k,n,count1;bool func(int n) {int mark0;if(n1){return 1;}else{for(int i2;i<n-1;i){if(n%i0){mark1;return 0;}}if(mark0)r…

力扣困难题汇总(13道)

题4&#xff08;困难&#xff09;&#xff1a; 思路&#xff1a; 找两数组中位数&#xff0c;这个看起来简单&#xff0c;顺手反应就是数第(mn)/2个&#xff0c;这个难在要求时间复杂度为log(mn)&#xff0c;所以不能这样搞&#xff0c;我的思路是&#xff1a;每次切割长度为较…

国家计算机二级MSOffice计算机选择题题库汇总精选

计算机二级选择题题目&#xff08;带答案&#xff09; 下列关于栈和队列的描述中&#xff0c;正确的是() 栈是先进先出队列是先进后出队列允许在队友删除元素栈在栈顶删除元素 答案&#xff1a;D 解析&#xff1a;栈实际也是线性表&#xff0c;只不过是一种特殊的线性表…

【C# 网络编程】基本概念

基本概念 OSI模型 背景&#xff1a; 为了统一和兼容不同计算机厂商的网络体系结构概念&#xff0c;国际标准化组织&#xff08;ISO&#xff09;在1979年提出了OSI参考模型&#xff08;Open System Interconnection&#xff0c;&#xff09; 结构 物理层&#xff08;Physica…

poi通过在word中写入了表格,通过libreoffice转换成PDF后,word中刚才画的表格宽度无限拉伸问题的解决。

一、复现&#xff1a; poi版本&#xff1a; <poi>3.17</poi><poi-ooxml>3.17</poi-ooxml><poi-ooxml-schemas>3.17</poi-ooxml-schemas><dependency><groupId>org.apache.poi</groupId><artifactId>poi</arti…

MySQL增删改进阶

目录 1.数据库约束 1.1约束类型 1.2 not null约束 1.3 unique&#xff1a;唯一约束 1.4 default&#xff1a;默认约束 1.5 primary key&#xff1a;主键约束 1.6 foreign key:外键约束 1.7 check约束&#xff08;了解&#xff09; 2.表的设计 3.新增&#xff08;进阶&…

论文阅读(十六):Deep Residual Learning for Image Recognition

文章目录 1.介绍2.基本原理3.两种残差块4.网络结构 论文&#xff1a;Deep Residual Learning for Image Recognition   论文链接&#xff1a;Deep Residual Learning for Image Recognition   代码链接&#xff1a;Github 1.介绍 在ResNet网络提出之前&#xff0c;传统的卷…

200Kg大载重多旋无人机价格高昂技术分析

200Kg大载重多旋无人机作为一种高度专业化的航空工具&#xff0c;其价格相较于普通无人机显著较高&#xff0c;这主要是由于其在技术设计和生产过程中所需的高要求所致。以下是对其价格高昂的技术分析&#xff1a; 一、高性能材料与结构设计 1. 高强度轻量化材料&#xff1a;…

D41【python 接口自动化学习】- python基础之函数

day41 函数参数传递错误 学习日期&#xff1a;20241018 学习目标&#xff1a;函数&#xfe63;-54 避坑指南&#xff1a;列表作为参数传递出错了怎么办&#xff1f; 学习笔记&#xff1a; 列表类型的特殊性 list1[x,y,z] tuple1(list1,b,c)# 修改元组中的列表&#xff0c;会…

树莓派4B-高精度驱动步进电机

项目介绍 利用4B树莓派控制步进电机转动&#xff0c;精度可达&#xff1a;0.0144度 (即360度/25000) 适用于非常精密的角度转动。 舵机的精度为1度&#xff0c;无法实现超高精度控制。 硬件需求 硬件型号不同&#xff0c;只要功能相同&#xff0c;代码即可兼用。 树莓派CDKU- …

Vue详细入门(语法【三】)

今天滴的学习目标&#xff01;&#xff01;&#xff01; Vue组件是什么&#xff1f;组件的特性和优势Vue3计算属性Vue3监听属性 在前面Vue详细入门&#xff08;语法【一】——【二】&#xff09;当中我们学习了Vue有哪些指令&#xff0c;它的核心语法有哪些&#xff1f;今天我们…

rhce:列行性(at和cron)

配置 at练习 设置时间提醒 定义一分钟后显示命令&#xff0c;使用atq查看 cron练习 配置 systemctl status crond 查看文件所在位置 ll /var/spool/cron/ 主要功能 开始操作 进入界面操作每天早上9点说hello crontab -e 五个星号分别代表分时日月周&#xff0c;其次是执…

【MySQL】MySQL的简单了解详解SQL分类数据库的操纵方法

一、mysql定义 mysql是数据库服务的客户端&#xff0c;mysqld是数据库服务的服务器端。mysql的本质就是基于CS模式下的一种网络服务。数据库一般指的是在磁盘中或内存中存储的特定结构组织的数据&#xff0c;将来就是在磁盘上存储的一套数据库方案。 创建数据库&#xff0c;本质…

aws(学习笔记第六课) AWS的虚拟私有,共有子网以及ACL,定义公网碉堡主机子网以及varnish反向代理

aws(学习笔记第六课) AWS的虚拟私有&#xff0c;共有子网以及ACL&#xff0c;定义公网碉堡主机子网以及varnish反向代理 学习内容&#xff1a; AWS的虚拟私有&#xff0c;共有子网以及ACL定义公网碉堡主机子网&#xff0c;私有子网和共有子网以及varnish反向代理 1. AWS的虚拟…

Docker 教程十(Docker Compose)

Docker Compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;您可以使用 YML 文件来配置应用程序需要的所有服务。然后&#xff0c;使用一个命令&#xff0c;就可以从 YML 文件配置中创建并启动所有服务。 如果你还不了解 YML 文件配…