可编程透明代理
4 个回答
2
如果你在找Perl的解决方案,可以看看这个HTTP::Proxy
。
不过我不太确定有没有mod_perl的解决方案。你可以在CPAN上找到Apache::Proxy
,而在谷歌上搜索会找到MyProxy。不过要注意,这两个工具都有点老旧,所以效果可能会有所不同,但你可能会觉得它们对你有帮助。
3
Squid和Apache都有一些机制,可以在每次请求时调用外部脚本来决定是否允许或拒绝。这意味着你可以使用这两个工具作为代理服务器,但每次请求时都可以调用你的外部脚本来处理复杂的逻辑。你的代码只需要处理业务逻辑,而不需要处理繁重的工作。
在Apache中,我从来没有用过mod_proxy
以这种方式,但我用过mod_rewrite
。mod_rewrite
也可以用来代理请求。RequestMap
指令允许你把决策交给外部脚本:
MapType: prg,MapSource: 指向有效常规文件的Unix文件系统路径
这里的源是一个程序,而不是一个映射文件。你可以用任何你喜欢的语言来创建它,但结果必须是一个可执行程序(可以是对象代码或以魔法字符串'#!/path/to/interpreter'作为第一行的脚本)。
这个程序在Apache服务器启动时只会启动一次,然后通过它的标准输入和标准输出与重写引擎进行通信。对于每次映射函数查找,它会在标准输入中接收到一个以换行符结束的字符串作为查找的键。然后,它必须在标准输出中返回查找到的值,格式也是以换行符结束的字符串,或者返回四个字符的字符串``NULL'',表示查找失败(也就是说,没有与给定键对应的值)。
在Squid中,你可以通过external_acl_type
指令获得类似的功能:
这个标签定义了如何使用辅助程序来查找外部访问控制列表(acl)类的状态。
祝你好运!