HTTP、TCP代理(Proxy)

代理也是zbus提供的经常使用到的功能之一,在这个层面zbus并不是与Nginx,Apache等反向代理竞争产品,而是提供了一个更加简洁的实现选择,同时弥补了在特殊网络要求下的代理模式,比如在金融行业中经常会使用到的安全隔离DMZ中,Apache和Nginx等反向代理均失效,因为目标服务器根本无法连接,而zbus的HttpProxy正是为这种代理而生,当然zbus的弹性能力,使得用zbus部署传统的反向代理一样简单。

HttpProxy代理配置

启动类 io.zbus.proxy.http.HttpProxy

<zbus>   
    <!-- HttpProxy, capable of working in DMZ network enviornment --> 
    <!-- Can be multiple zbus servers, for HA -->
    <!-- Token settings is for zbus authentication -->
    <httpProxy zbus="localhost:15555" connectionCount="1" consumeTimeout="10000" token="admin">
      <proxy entry="http" token="admin" sendFilter="io.zbus.examples.proxy.MyMessageFilter" recvFilter="">
            <target>http://localhost:15555/?cmd=server</target> <!-- Can be multiple -->
            <target>http://localhost:15556/?cmd=server</target>
      </proxy>
    <!-- you may add multiple proxies -->
    </httpProxy>  
</zbus>

zbus的代理能力还体现在其扩展性,sendFilter与recvFilter提供了消息代理的中间逻辑拦截介入,来完成个性化需求,诸如打印日志,截断请求,URL重写等等。

除了HTTP层面的代理,zbus也提供了TCP层的透明代理

TcpProxy TCP透明代理

可以方便代理任何TCP协议,示例简单自我解释。

启动类 io.zbus.proxy.tcp.TcpProxy

<zbus>  
    <tcpProxy>  
        <server>0.0.0.0:80</server>
        <target>localhost:15555</target>
        <connectTimeout>3000</connectTimeout>
        <idleTimeout>60000</idleTimeout> 
    </tcpProxy> 
</zbus>

本地启动80端口服务,所有访问80的端口的数据转发到15555端口上。