Nginx 转发FTP请求

我使用主机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;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。