当前位置: 主页 > 日志 > Linux >

用HAProxy实现二级代理(代理转发)

由于代理提供商要求绑定服务器的IP,而且只能绑定一个。但是我们需要在多台服务器上使用这些代理,因此需要实现一个代理转发服务。

先后试过三种方案实现的代理转发:

1)用DeleGate实现。它支持二级代理,可以将代理请求转发到上游代理。并且支持双向的HTTP proxy basic authentication。

例如:./src/delegated -P20130 SERVER=http PERMIT="*:*:*" PROXY="66.219.22.4:8080" MYAUTH="redice:123456789" AUTHORIZER="-list{sitedigger:sd201314}" AUTH=viagen:-

本地监听20130端口提供代理服务,并将数据转发给上游代理66.219.22.4:8080。支持双向的代理认证(上游和客户端)。

缺点:需要为每个监听端口开启一个进程,我们总共要用上千个代理,不可能开启上千个进程。

2)用端口转发工具rinetd实现。

rinetd仅仅是一个TCP端口转发工具。当上游代理不需要HTTP proxy basic authentication认证时就可以使用。

缺点是:不支持客户端的HTTP proxy basic authentication。灵活性不够好。

3)用HAProxy实现。

HAProxy是个强大的负载均衡器,本身就具有这样的功能,通过修改配置文件可以实现支持双向认证的代理转发服务。

下面是部分配置文件:

userlist UsersFor_ProxyAuth
        user redice insecure-password ********

listen proxy1 0.0.0.0:50001
        option http_proxy 
        option http-use-proxy-header
        server fp1 1.1.1.1:8800
        balance roundrobin
        acl auth_acl http_auth(UsersFor_ProxyAuth)
        http-request auth realm BasicAuth unless auth_acl

listen proxy1 0.0.0.0:50001
        option http_proxy
        option http-use-proxy-header
        server fp1 2.2.2.2:8800
        balance roundrobin
        acl auth_acl http_auth(UsersFor_ProxyAuth)
        http-request auth realm BasicAuth unless auth_acl

listen proxy2 0.0.0.0:50002
        option http_proxy
        option http-use-proxy-header
        server fp1 3.3.3.3:8800
        balance roundrobin
        acl auth_acl http_auth(UsersFor_ProxyAuth)
        http-request auth realm BasicAuth unless auth_acl
...

由于上游代理已经绑定了我们服务器的IP,不需要HTTP proxy basic authentication,所以这里配置没有体现上游的认证,只体现了客户端的认证。要想了解上游认证怎么实现,可以看看这里:http://serverfault.com/questions/386431/authenticated-proxies-on-haproxy-load-balancer

“option http-use-proxy-header”选项很重要,如果不加HAPorxy默认采用的是HTTP basic authentication(状态码401,注意HTTP proxy basic authentication的状态码是407)。

这个方案目前来看是最完美的,实现了所有想要的功能。

 

[日志信息]

该日志于 2013-12-12 15:51 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “用HAProxy实现二级代理(代理转发)” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部