我使用主机A的IIS创建了一个FTP服务,然后在主机B启动了一个Nginx服务,然后使用C主机通过B转发请求访问到A的FTP。
FTP服务器限制了数据端口的区间。
nginx.conf增加了全区间端口的监听。
结果:
21命令端口转发成功,FTPClient可以链接成功,并且成功创建文件夹。
但是数据端口转发失败,listFiles()获取不到文件,retrieveFile,storeFile都失败
nginx.conf:
stream {
upstream ftp {
hash $remote_addr consistent;
server 172.20.10.2:21 ;
}
server {
listen 8080;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass ftp;
}
upstream ftp1 {
hash $remote_addr consistent;
server 172.20.10.2:50000 ;
}
server {
listen 50000;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass ftp1;
}
upstream ftp2 {
hash $remote_addr consistent;
server 172.20.10.2:50001 ;
}
server {
listen 50001;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass ftp2;
}
…
upstream ftp1000 {
hash $remote_addr consistent;
server 172.20.10.2:50999 ;
}
server {
listen 50999 ;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass ftp2;
}
}
应该你还需要再加一个端口
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。
但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。