Nginx代理TCP/UDP并测试
环境检查
是否开启 stream
nginx从1.9.0版本开始,新增了ngx_stream_core_module模块,使nginx支持四层代理和负载均衡。
默认编译时该模块未编译进去,需要编译时添加 --with-stream,–with-stream_ssl_module,使其支持stream代理。
# 查看当前 Nginx 是否支持 stream 模块
2>&1 nginx -V | tr ' ' '\n'|grep stream
# 说明支持 stream 模块
--with-stream
编译安装Nginx
如果没有安装 Nginx
, 可以使用源码编译安装的方式安装 Nginx
, 并开启 stream
模块,编译时如果相关编译所需依赖没有,centos 直接 yum 下载即可。
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.1.tar.gz
tar zxf nginx-1.12.1.tar.gz
cd nginx-1.12.1
./configure --prefix=/usr/local/nginx --with-stream
make && make install
配置文件
以下为 Nginx
完整配置文件,分别监听 8080 端口转发 udp 服务和 7778 端口转发 tcp 服务。
user root;
worker_processes auto;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#access_log logs/access.log;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
stream {
proxy_timeout 30s;
upstream udp_server {
server 127.0.0.1:20000;
}
log_format main '$remote_addr - [$time_local] '
' $status $bytes_sent ';
server {
listen 8080 udp;
proxy_pass udp_server;
#proxy_bind $remote_addr transparent;
access_log /usr/local/nginx/logs/domain.access.log main;
}
server {
listen 7778;
proxy_pass tcp_server;
}
upstream tcp_server {
least_conn;
server 127.0.0.1:7777;
}
}
可用性测试
这里可以使用 Go 编写简单的 tcp/udp 服务。
UDP
UDP Server
udp_server.go
package main
import (
"fmt"
<