之前对于Nginx的理解一直都是认为是基于HTTP层的反向代理+负载均衡,今天想用Nginx实现TCP层的反向代理,实现基于TCP的端口转发,之前一篇文章iptables实现tcp端口转发已经用iptables实现了。
安装
$ git clone git@github.com:yaoweibin/nginx_tcp_proxy_module.git $ wget http://tengine.taobao.org/download/tengine-2.0.3.tar.gz $ tar -zxvf tengine-2.0.3.tar.gz $ cd tengine-2.0.3 这一步很重要,根据Ngx的源码打patch,不然就会编译失败 $ patch –p1 < /path/nginx_tcp_proxy_module $ ./configure --user=www --group=www --prefix=/opt/nginx --with-syslog --add-module=/path/nginx_tcp_proxy_module/ $ make && sudo make install
TCP反向代理配置
模块指令是TCP,它是不属于HTTP框架内的,所以和HTTP{}同级别。
events { worker_connections 1024; } http { ... } tcp { upstream firefoxbug { # simple round-robin server localhost:2221; server localhost:2222; check interval=3000 rise=2 fall=5 timeout=1000; #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello; #check interval=3000 rise=2 fall=5 timeout=1000 type=http; #check_http_send "GET / HTTP/1.0\r\n\r\n"; #check_http_expect_alive http_2xx http_3xx; } server { listen 9999; proxy_pass firefoxbug; } }
upstream的模块依赖是Ngx之前HTTP反向代理的模块,对于负载均衡的方式配置可以查看Nginx Upstream负载均衡模块
结果
所有到Nginx的9999端口都被转发到22221和22222端口,实现了forward功能。