使用NGINX代理和负载平衡TCP/UDP流量

TCP 是许多流行应用程序和服务的协议,例如 LDAP、MySQL 和 RTMP。

UDP(用户数据报协议)是许多流行的非事务性应用程序的协议,例如 DNS、系统日志和 RADIUS。

配置反向代理

打开 NGINX 配置文件并执行以下步骤:

  1. 创建一个顶级stream{}块:
stream {
    # ...
}

2.server{}在顶级上下文中为每个虚拟服务器定义一个或多个配置块stream {}

3.在server{}每个服务器的配置块中,包含listen用于定义服务器侦听的IP 地址和/或端口的指令。对于 UDP 流量,还包括该udp参数。由于 TCP 是stream{}里上下文的默认协议,因此该listen指令没有tcp参数:

stream {

    server {
        listen 12345;
        # ...
    }

    server {
        listen 53 udp;
        # ...
    }
    # ...
}

4.包含proxy_pass用于定义代理服务器或服务器将流量转发到的上游组的指令:

stream {

    server {
        listen     12345;
        #TCP traffic will be forwarded to the "stream_backend" upstream group
        proxy_pass stream_backend;
    }

    server {
        listen     12346;
        #TCP traffic will be forwarded to the specified server
        proxy_pass backend.example.com:12346;
    }

    server {
        listen     53 udp;
        #UDP traffic will be forwarded to the "dns_servers" upstream group
        proxy_pass dns_servers;
    }
    # ...
}

5.如果代理服务器有多个网络接口,您可以选择将 NGINX 配置为在连接到上游服务器时使用特定的源 IP 地址。如果 NGINX 后面的代理服务器配置为接受来自特定 IP 网络或 IP 地址范围的连接,这可能很有用。

包括proxy_bind相应网络接口的指令和 IP 地址:

stream {
    # ...
    server {
        listen     127.0.0.1:12345;
        proxy_pass backend.example.com:12345;
        proxy_bind 127.0.0.1:12345;
    }
}

6.或者,您可以调整两个内存缓冲区的大小,NGINX 可以在其中放置来自客户端和上游连接的数据。如果数据量较小,可以减少缓冲区,这样可以节省内存资源。如果数据量较大,可以增加缓冲区大小,以减少socket读写操作的次数。一旦一个连接上收到数据,NGINX 就会读取它并通过另一个连接转发它。缓冲区由proxy_buffer_size指令控制:

stream {
    # ...
    server {
        listen            127.0.0.1:12345;
        proxy_pass        backend.example.com:12345;
        proxy_buffer_size 16k;
    }
}

配置 TCP 或 UDP 负载平衡

等之后有时间再来写啦~

参考

https://nginxproxymanager.com/advanced-config/#custom-nginx-configurations

https://administrator.de/forum/reverse-proxy-fuer-tcp-und-udp-anfragen-398930.html

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

分享你的喜爱

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注