我想知道是否可以使用 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/