特别感谢汉尼拔草的文章,在看了之后茅塞顿开。
环境描述
外部服务需要删除数据至服务器C,但是外部服务只能与服务器B连同,而B与C在同一个内网下可以连通。
这个ftp服务是使用filezilla快速搭建的。
操作步骤
之前有用nginx代理过mysql数据库,所以参考的就也尝试用nginx来进行代理。
1、在服务器B上安装nginx,具体略过。
2、在nginx.conf配置文件中配置如下
# ftp代理
stream{
upstream ftp{
hash $remote_addr consistent;
server ftp的ip:端口;
}
server {
listen 39997; #代理端口
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass ftp;
}
upstream batch{
hash $remote_addr consistent;
server ftp的ip:监听被动模式的端口1;
}
server {
listen 30000;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass batch;
}
upstream batch2{
hash $remote_addr consistent;
server ftp的ip:监听被动模式的端口2;
}
server {
listen 30001;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass batch2;
}
}
其中需要要注意的是要多代理几个监听端口。
3、filezilla的配置
开启被动模式,选择监听传输端口范围;在下面选择"Use the following IP",这里填的服务器B的IP,公网IP。
开启ssl/tls支持,生成新证书
之后在使用官网测试工具试试连接(https://ftptest.net/),发现还是不可以
之后我又去查看了有没有什么IP限制,黑名单之类的,防火墙也暂时关闭看看,结果都不行。然后我才想起来我代理的数据端口只有2个,而监听的范围有100个,所以我把监听范围改小之后就可以通过了。
反思
经过一天一夜的摸索,虽然暂时解决了问题,但是还留下的一下问题没能很好的解决。
现在的监听端口是30000-30001这两个端口,也就是说最多只支持2个服务同时传输数据。为什么不开多一点呢?原因是我在使用nginx代理的时候不能快捷代理多个端口,所以就没有弄,一个一个加太麻烦了。不知道其他码友们有没有知道其他代理的方法,或者nginx代理多个端口的方法?欢迎留言评论哦。