nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx TCP/DUP流量转发

Nginx 实现 TCP/DUP流量按 IP 动态转发操作方法

作者:小小工匠

为优化网络性能和提升服务可用性,通过Nginx配置stream模块根据客户端IP地址动态转发TCP请求至不同后端服务器节点,适用于数据库代理、TCP服务负载均衡及地域或来源IP分流的流量调度等场景,本文给大家介绍Nginx 实现 TCP/DUP流量按 IP 动态转发的操作

Nginx Stream TCP 协议按 IP 转发

背景

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

需求目标

使用场景

成功标准

技术要求

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;
}

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

nginx -t

重新加载 Nginx 服务

nginx -s reload

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

到此这篇关于Nginx 实现 TCP/DUP流量的按 IP 动态转发的文章就介绍到这了,更多相关Nginx TCP/DUP流量转发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文