vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

红伞升级代理服务器 中是否需使用 squid

20:30 , vkill
这个是前段时间做实验的时候的东西,现在记下来

upd.avira.net.cn 运行也大半年了。以前一次偶然的机会,quay776 说是使用iis后avira填代理地址为iis地址后可以升级,觉得不能理解,后来使用了 nginx 也可以,就慢慢的了解了下,觉得应该是 反向代理 的作用,虽然iis 是否有 反向代理 的功能无处可查。

好了,既然用 nginx 可以实现avira代理地址中填入nginx的地址可以升级,那么我们为啥还要讨论是否需要使用 squid 那。

记得以前我想过,avira 使用代理的时候也可以填用户名和密码的,那么我们可以适当的做点限制,比如说我们可以给不填用户名和密码的用户限速,给填入用户名和密码的用户不限速,这样可以适当的适当的解决点经济问题,毕竟vps还是每月200元租用费的;还有我们可以收集下用户的key,用来做统计用,如果过多用户使用一个key来升级的话,可以禁掉这个key,这也就变相的实现了官方是怎么封key的了。

好了,有了需求,那我们就来想办法实现,对于这两个问题nginx 都无法实现:
第一个问题:也许你会说,nginx 有 ngx_http_auth_pam_module 模块可以使用mysql中用户来认证的,但是你如果试试就知道了,nginx 的这个认证是 http 认证,而非 proxy 认证,而squid 提供的认证,是http认证,也是proxy认证,squid可以使用 auth_param 指令来使用外部script 来认证,它会给外部script传递参数的(包括用户名和密码),可以使用外部script的话,那就可以去查询mysql了,当然就可以使用 mysql 中用户了,这点我已经实验过,可行
第二个问题:nginx 我查了好多资料,应该是没法实现(自己写module另论),而squid 有个 external_acl_type 外部acl指令,也可以指定外部script,它给外部script传递参数(可包括http header中所有),而你avira升级的时候,http header 中是包括了你的key sn的,所以就可以把你key sn保存到mysql中,接下来禁止你这个key使用本代理升级就很好实现了,我相信官方判断是否一个key多人用来升级也是类似这个方法

好了,大概意思就是这样,当然实现起来还是需要点时间的,不过只要思路通了,剩下的事情还难吗?

当然实际使用中,使用 nginx 还是使用 squid+nginx 这个得看需求。
类别:linux system | Tags: , , , , , , , , | 2 条评论, 1395 次阅读
网友评论(2):
shadowmin
2010/05/20 14:40
封key,感觉每天用脚本跑一下就好了,封key应该不需要哪么高的实时性。
对于较多的服务器,日志一般可以写到数据库中,更便于统计。
vkill replied on 2010/05/20 16:18
呵呵,如果不是实时的话,可以考虑每天跑一下脚本来从日志中分析。这个只是当时学习 squid 的时候做过的实验,想出来了就去实现了下
shadowmin
2010/05/20 14:43
关于IIS的那个问题,好像一般的服务器,当你采用服务器地址做代理,随便输入一个地址后,他会显示他的默认站点的页面。之所以要设置反向代理,可以防止用户只输入IP,而不输入域名,当IP有变化的时候,会比较方便。
vkill replied on 2010/05/20 16:20
关于这个 iis ,我还真不清楚原理,呵呵,现在一直都用 nginx 了。
Pages: 1/1 First page 1 Final page
发表评论:

Nickname: 
Email:
Site URI: