在服务器上做端口转发,用得最多的就是nginx,我所在的项目中大部分前端、后端路由也都是通过nginx转发的。大致流程为:
但是我个人使用nginx最多的还是http转发,如下图,/api/back开头的路径转发到http的8105端口,其他的路径转发到前端/home/admin/back/dist目录下
但是实际项目中,经常会遇到一些非http协议的转发,例如netty客户端和服务端的连接,中间需要做一个中间转发层,搜索资料说可以使用nginx的Stream配置(大概代码如下),但是实际在实践,发现使用nginx转发有问题,客户端可以正常连接nginx,但是nginx到不了服务端,这块试了下,也不知道为什么。
于是在网上搜了下,发现rinetd工具可以满足我的需求。现将rinetd大致安装配置流程记录如下:
1、安装
wget http://www.rinetd.com/download/rinetd.tar.gz
tar zxvf rinetd.tar.gz
cd rinetd
mkdir -p /usr/man/man8
make && make install
2、配置端口转发
vi /etc/rinetd.conf
0.0.0.0 7891 127.0.0.1 7890
配置的意思是将服务器的7891端口转到到本地的7890端口,也可以转发到内网其他机器
3、启动
rinetd -c /etc/rinetd.conf
4、停止
killall rinetd
5、校验
netstat -tanulp|grep rinetd
[root@xxxxxxx rinetd]# netstat -tanulp|grep rinetd
tcp 0 0 0.0.0.0:7891 0.0.0.0:* LISTEN 5653/rinetd
tcp 0 0 172.25.154.91:7891 172.25.154.91:33308 ESTABLISHED 5653/rinetd
tcp 0 0 127.0.0.1:54954 127.0.0.1:7890 ESTABLISHED 5653/rinetd
附言,最近查资料iptables也可以实现端口转发,有时间实践一下。