由于代理提供商要求绑定服务器的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)。
这个方案目前来看是最完美的,实现了所有想要的功能。
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢