端口转发之Nginx篇
由于经常有端口转发的需求,折腾来折腾去发现还是Nginx好用,而且支持TCP+UDP
从1.9.0开始,nginx就支持对TCP的转发,而到了1.9.13时,UDP转发也支持了。
TCP配置如下:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
stream {
server {
listen 3000;
proxy_pass 127.0.0.1:4000;
}
}
第一行load_moudle 为显式指定加载strem类的so,不添加这一行除了手动显式添加–with-stream的基本都会报错。有些版本的nginx还不带这个so文件
worker_connections 可以自行调节。但是要注意,nginx的最大队列深度在FreeBSD,DragonFly BSD和macOS上设置为-1,在其他平台上设置为511。
UDP配置如下:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
stream {
server {
listen 3000 udp;
proxy_pass 127.0.0.1:4000;
proxy_timeout 1s;
proxy_responses 1;
}
}
在listen配置中的udp选项告诉nginx这是udp反向代理。而proxy_timeout和proxy_responses则是维持住udp会话机制的主要参数。
UDP协议自身并没有会话保持机制,nginx于是定义了一个非常简单的维持机制:客户端每发出一个UDP报文,通常期待接收回一个报文响应,当然也有可能不响应或者需要多个报文响应一个请求,此时proxy_responses可配为其他值。而proxy_timeout则规定了在最长的等待时间内没有响应则断开会话。
proxy_timeout 默认值是10分钟,proxy_responses默认值是一直维持会话。所以UDP转发一定要有proxy_responses不然就会很快就满了会话数导致无法继续转发。
如果是Windows配置对比linux配置 只需删除第一行即可。