Nginx 1.9作为TCP反向代理(负载平衡)
从nginx 1.9开始,开源版中也有了tcp load balancing,为此投入了很多人力,这也是一个典型的商业软件开发支持开源产品的例子(此特性最早出现于nginx的商业版nginx plus)。
why tcp load balancing
nginx最初是一个反向代理,如今已经具有非常丰富的特性,web server, 缓存/加速,反向代理 , 应用网关。
Nginx一般用作繁忙网站的前端,44.9%的前10000最繁忙商业网站使用了nginx作为前端。
当你在内部使用nginx为应用实现代理和load balancing时,tcp load balancing将使你受益。现代应用使用各种协议而不只是http,nginx可用来处理这些内部流量,比如mysql load balancing就是一个好例子。
安装
CentOS 6.7默认源安装的Nginx版本是1.0.x,实在是古董级别,要安装最新版本的Nginx请自行添加源。
创建文件/etc/yum.repos.d/nginx.conf
只使用指定源安装Nginx
如何配置TCP load balancing
TCP load balancing在stream
上下文中配置,与http
和mail
类似,stream
上下文能配置若干监听TCP连接的Server
,连接被转发到由proxy_pass指令设定的upstream
server group。Nginx使用load balancing算法来在upstream servers
是选择。
以上配置实现的是Nginx plus r5中的特性,详情可见TCP Load Balancing in NGINX Plus R5
测试
将测试机上的1307端口流量转发到vaio笔记本上的socks5端口。
在/etc/nginx/nginx.conf
配置文件末尾添加
重新加载配置
在浏览器中设置代理为测试机172.18.1.34:1307
在浏览器中打开google.com
,监听笔记本vaio 172.18.5.233:1080
google页面打开,同时tcpdump
输出
tcp转发成功,当然这里只有一台机器无法体现Load balancing,只能验证tcp reverse proxy功能的正常。