Nginx 反向代理至非 HTTP 软件

Nginx 反向代理至非 HTTP 软件

我想知道是否可以使用 Nginx 来做到这一点:

server1.domain.com:9999 --> localhost:4000
server2.domain.com:9999 --> localhost:5000
server3.domain.com:9999 --> localhost:6000
server4.domain.com:9999 --> localhost:7000

在端口 4000、5000、6000 和 7000 上运行的服务不是 HTTP 软件。

如果无法使用 Nginx,我可以使用什么程序来实现这一点(而不会干扰 Nginx)?我的 VPS 正在运行 Ubuntu 18.04。

谢谢。

答案1

是的,您需要使用流。

在 NGINX Plus Release 5 及更高版本中,NGINX Plus 可以代理和负载平衡传输控制协议 (TCP) 流量。TCP 是许多流行应用程序和服务的协议,例如 LDAP、MySQL 和 RTMP。

在 NGINX Plus Release 9 及更高版本中,NGINX Plus 可以代理和负载平衡 UDP 流量。UDP(用户数据报协议)是许多流行的非事务性应用程序的协议,例如 DNS、syslog 和 RADIUS。

先决条件

最新的 NGINX Plus(无需额外的构建步骤)或使用 --with-stream 配置标志构建的最新 NGINX Open Source

通过 TCP 或 UDP 进行通信的应用程序、数据库或服务

上游服务器,每个服务器都运行相同的应用程序、数据库或服务实例

它类似于 http 块

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

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

相关内容