0
点赞
收藏
分享

微信扫一扫

通过Nginx实现tcp流量中转

十里一走马 2024-12-02 阅读 7
Nginx运维

NGINX 进行 TCP 流量转发的原理并不是简单地修改 TCP 包的目标地址,而是通过建立代理连接,在客户端和目标服务器之间进行中转。以下是详细解释:

NGINX TCP 流量转发的原理

  1. 客户端连接
  • 客户端发起 TCP 连接请求到 NGINX 服务器,连接到 NGINX 配置的监听端口(如 5432)。
  1. NGINX 接收连接
  • NGINX 接收到客户端的连接请求,并根据配置文件中的 proxy_pass 指令确定将流量转发到哪个上游服务器。
  1. 建立到上游服务器的连接
  • NGINX 代理模块(ngx_stream)会代表客户端发起与上游服务器的 TCP 连接。此时,NGINX 是作为一个客户端连接到上游服务器的。
  1. 流量转发
  • 建立连接后,NGINX 在客户端和上游服务器之间传递数据。NGINX 接收来自客户端的数据包,并将其发送给上游服务器;同样地,接收来自上游服务器的数据包,并将其发送给客户端。

数据流的中转

  • 客户端到NGINX: 客户端 → NGINX 监听端口
  • NGINX到上游服务器: NGINX 代理模块 → 上游服务器

与修改目标地址的区别

与直接修改 TCP 包的目标地址(如 NAT 或 IP 重写)不同,NGINX 的 TCP 代理会保持两个独立的 TCP 连接:

  • 一个连接在客户端和 NGINX 之间。
  • 另一个连接在 NGINX 和上游服务器之间。

这意味着 NGINX 可以对数据流进行更多的控制和处理,例如负载均衡、访问控制、流量监控等

配置示例

以下是 NGINX 的 stream 模块配置 TCP 代理的示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}
stream {
    upstream backend {
        server 106.75.198.227:2009;
    }

    server {
        listen 5432;
        proxy_pass backend;
    }
}

http {
......
}

通过以上配置,NGINX 将监听本地的 5432 端口,将收到的所有流量转发到 192.168.0.190:5432

总结

NGINX 通过建立独立的代理连接来实现 TCP 流量转发,而不是简单地修改 TCP 包的目标地址。这样可以提供更强的流量控制和处理能力,同时确保客户端和上游服务器之间的通信透明。

举报

相关推荐

0 条评论