概述
本文系原创,同时发布于F5社区。
Nginx从1.9.0开始加入了stream模块支持四层的代理,转发和负载均衡。但是,stream模块的功能相对简单。对需要ALG处理的协议比如FTP的支持也远远不够。
我试着去修改了Nginx 的源代码,使之支持了FTP PORT模式和Passive模式的ALG功能。并且结合vsftpd进行了测试。 Github的源码地址为:https://github.com/pei-jikui/nginx-alg 。
可能大家会说,Passive模式不需要ALG。准确的说,Passive模式下,如果ftp client到server路由可达,可以不需要ALG。但是在client到server路由不可达的情况下,Passive模式也必须有ALG的支持。
代码修改更多是为了功能实验,代码写得比较粗糙,要想和Nginx本身的代码完全融合起来,还需要一些时间去做修改和打磨。
实验的效果如下:
图1: FTP被动数据连接