牛骨文教育服务平台(让学习变的简单)
博文笔记

Nginx的tcp反向代理初探

创建时间:2015-08-13 投稿人: 浏览次数:12460

前面一篇文章只是简单使用了一些nginx的http代理,大家可以看到,非常的easy。


只要对nginx.conf稍作简单的配置就可以实现http反向代理了。但是我们现在的应用场景不一样,我们现在需要tcp的反向代理。


因为tcp反向代理默认不在nginx的模块里面,而需要自己编译进去,可喜的是,阿里的大牛已经将tcp反向代理弄好了。我们只要直接拿来用就好了,这个时候就是发扬鲁迅先生的拿来主义就好了。


ubuntu 12.04


接着前面那句话,TCP代理,就是中间有个代理。客户所有的服务都交给代理来做,而代理再把这些服务转交给真正的后端服务器来处理,中间的代理只做一个转发的操作。

详细的大家可以看参考5里面。


nginx最新的版本为1.9.3,我将其和在参考2里面下载的nginx_tcp_proxy_module一起编译,就是编译不过。

最终,我还是下载了1.7.2版本的nginx。


这里的nginx-1.7.2-exe是编译时生成的文件夹。


$ wget "http://nginx.org/download/nginx-0.7.65.tar.gz"
$ tar -xzvf nginx-0.7.65.tar.gz
$ cd nginx-0.7.65/
$ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
$ ./configure --add-module=/path/to/nginx_tcp_proxy_module
$ make
$ make install
网上的代码一般是这样安装tcp模块的。

这里需要注意的就是/path,其实就是tcp_proxy模块所在的位置.

我的tcp代理模块解压后的路径为:/home/hwh/pt_Nginx/test0/nginx_tcp_proxy_module-master

其他的和上面一样就可以了。


所以我的步骤为:

$cd /home/hwh/pt_Nginx/test0/nginx-1.7.2

$patch -p1 < /home/hwh/pt_Nginx/test0/nginx_tcp_proxy_module-master/tcp.patch

&./configure --prefix=/home/hwh/pt_Nginx/test0/nginx-1.7.2-exe --add-module=/home/hwh/pt_Nginx/test0/nginx_tcp_proxy_module-master

$make

$make install


根据这些步骤,就可以安装好了。


只要打开/home/hwh/pt_Nginx/test0/nginx-1.7.2-exe/conf/nginx.conf这个文件,在最末尾添加

tcp {
    upstream tcp_proxy_oldmtn {
        # simple round-robin
        server localhost:8201;

        #check interval=3000 rise=2 fall=5 timeout=1000;    
    }

    server {
        listen 8200;
        proxy_pass tcp_proxy_oldmtn;
    }
}

这个表示,当客户端使用tcp(非浏览器访问)时,若访问到nginx服务器的8200端口是,就会将其转交给后端服务器的8201端口(这里后端服务器也是本机)。


因为是在ubuntu下面的,而使用qt非常方便,我就使用Qt写了个小的客户端简单测试了一下。

客户端:



服务端:



经过测试可以看到,我们的tcp服务端仅在8201监听,而客户端却连的是8200端口,该端口是nginx的监听端口。

结果是可以正却联通的。

至此nginx的tcp反向代理搞定。




参考:

1.nginx tcp代理模块nginx_tcp_proxy_module安装及使用

http://m.blog.csdn.net/blog/xtjsxtj/40743735

2.nginx_tcp_proxy_module

http://yaoweibin.github.io/nginx_tcp_proxy_module/

3.http://yaoweibin.github.io/nginx_tcp_proxy_module/README.html

4.Nginx实现TCP反向代理

http://www.firefoxbug.com/index.php/archives/2775/

5.nginx支持TCP代理有什么作用

http://www.oschina.net/question/1457467_234303

6.实现TCP透明代理

http://blog.csdn.net/zhuweisky/article/details/25787787


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。