nginx基于TCP类型反向代理初探

2018-9-11 杰克 HA高可用高并发

      nginx作为一款轻量级的web端很早就支持反向代理,不过是基于http的。从1.9版本开始就支持基于TCP的反向代理。最近我就尝试搭建了一个用于remote远程桌面的反向代理。

      拓扑结构如下,192.168.1.244作为运行nginx代理将上游Windows服务器的远程桌面端口3389代理转换为65500端口。类似路由里的NAT技术

top.jpg

      nginx的主配置文件nginx.conf里关于TCP反向代理的配置,我想做成多项目的形式,所以在主配置文件里include子目录文件路径

 nginx-conf.png       

      这是针对3389端口代理的配置文件内容,本地侦听65500端口,代理目标服务器192.168.1.243的3389端口

remote-conf.png

      通过我的电脑远程桌面连接 192.168.1.244:65500 可以成功登录到Windows目标服务器192.168.1.243  但在远程桌面窗口标题上显示的IP还是nginx代理服务器的IP  在目标服务器上使用cmd命令查看连接信息可以看到连接到自身远程桌面3389端口的IP是来自nginx反向代理的IP 192.168.1.244 源端口是 37696

win-netstat.png

      回到nginx代理服务器上,同样使用netstat命令(注:Windows下的netstat命令和linux下的netstat命令名字一样但选项参数不一样)查看连接信息。可以看到nginx使用worker进程连接目标服务器的3389端口,本地源端口为37696 与在Windows服务器上看到的源端口一致。本地对65500端口的侦听由nginx主进程master完成

linux-netstat.png

      尝试从本机复制一个2GB的文件到目标服务器,发现代理服务器nginx进程的CPU占用马上升上来了,毕竟数据交互都由nginx代理转发

cp.png

 

之后又用其他基于TCP的协议测试了一下,基本都能实现。但有些不能,比如ISCSI 我测试是连接不上的,好像是跟ISCSI协议本身有关,不支持代理。

标签: TCP 反向代理 nginx

发表评论:

Powered by emlog 京ICP备17037512-1 e-mail:jackhkyin@163.com QQ:393147796