Nginx可以通过ngx_stream_core_module模块实现TCP/UDP协议的反向代理。步骤如下:
- 在stream {}块配置监听的端口与协议(tcp或udp)。
stream {
upstream tcp_servers { ... }
server {
listen 12345 tcp; # 监听TCP端口
proxy_pass tcp_servers;
}
}
- 在upstream {}块定义上游服务器组,类似于http代理。可使用ip_hash、least_conn等策略。
stream {
upstream tcp_servers {
least_conn;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
}
- 使用proxy_pass将请求转发到上游服务器。
- 使用proxy_timeout设置超时时间,类似http代理。
- 可以根据源地址或目标地址使用map指令实现访问控制。
map $server_addr $blocking {
default 0;
192.168.1.1 1; # 拒绝此地址
}
server {
proxy_pass tcp_servers;
proxy_timeout 10s;
access_log /var/log/nginx/tcp.access.log;
if ($blocking = 1) {
return 403; # 如果在map列表中,返回403
}
}
例如完整的tcp反向代理配置:
stream {
upstream tcp_servers {
least_conn;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
map $server_addr $blocking {
default 0;
192.168.1.1 1;
}
server {
listen 12345;
proxy_pass tcp_servers;
proxy_timeout 10s;
access_log /var/log/nginx/tcp.access.log;
if ($blocking = 1) {
return 403;
}
}
}
这种配置实现了TCP协议的负载均衡与反向代理,可用于代理数据库、CDN等TCP服务,提高服务稳定性。