【问题标题】:Programmable transparent forward proxy可编程透明转发代理
【发布时间】:2010-12-28 08:10:15
【问题描述】:

我正在寻找一种编写透明转发代理脚本的方法,例如用户在代理设置中将浏览器指向的代理。

我发现前向代理在可编写脚本性和稳健性之间存在明显的权衡。例如,它们是在RubyPython 中开发的无数代理,允许您检查每个请求响应并随意记录、修改、过滤……但是这些代理要么无法代理所需的所有内容,要么在使用 20 分钟后崩溃.

另一方面,我怀疑 Squid 和 Apache 相当健壮和稳定,但是在我的一生中,我无法确定如何通过脚本来开发动态行为。最终我想设置配额并动态过滤该配额。我的一部分感觉就像混合 mod_proxy 和 mod_perl??可以允许有趣的动态代理,但很难知道从哪里开始,也不知道它是否可能。

请指教。

【问题讨论】:

    标签: python ruby perl apache proxy


    【解决方案1】:

    如果您正在寻找 Perl 解决方案,请查看 HTTP::Proxy

    但不确定是否有任何 mod_perl 解决方案。 CPAN 确实提出了Apache::Proxy,而谷歌搜索提出了MyProxy。但是请注意,这两个都有点旧,所以 YMMV 但你可能会发现它们很有用。

    【讨论】:

      【解决方案2】:

      我一直在用 python 编写一个 HTTP 库,它是专门用代理服务器编写的,作为一个用例。在这一点上它还不是很成熟(当然需要更多的测试和单元测试),但它已经足够完整了,我觉得它很有用。我不知道它是否能满足您的任何需求。

      该库名为 httpmessage,google-code 站点位于 hereexamples page上有写代理服务器的例子。

      我很高兴收到反馈和/或错误修复。

      【讨论】:

        【解决方案3】:

        Squid 和 Apache 都具有调用外部脚本以根据请求做出允许/拒绝决策的机制。这允许您使用它们的代理引擎,但根据请求调用您的外部脚本以处理任意复杂性。您的代码只需要管理业务逻辑,而不是繁重的工作。

        在 Apache 中,我从来没有以这种方式使用过mod_proxy,但我使用过mod_rewrite。 mod_rewrite 还允许您代理请求。 RequestMap 指令允许您将决定传递给外部脚本:

        MapType: prg, MapSource: Unix 文件系统路径到有效的常规文件

        这里的源是一个程序,而不是一个地图文件。要创建它,您可以使用您选择的语言,但结果必须是可执行程序(目标代码或带有魔术 cookie 技巧 '#!/path/to/interpreter' 作为第一行的脚本)。

        该程序在 Apache 服务器启动时启动一次,然后通过其标准输入和标准输出文件句柄与重写引擎通信。对于每个映射函数查找,它将在标准输入上接收作为以换行符结尾的字符串来查找的键。然后它必须在 stdout 上将查找到的值作为换行符终止的字符串返回,或者如果失败(即,给定键没有对应的值),则返回四个字符的字符串“NULL”。

        使用 Squid,您可以通过 external_acl_type 指令获得类似的功能:

        这个标签定义了使用辅助程序的外部 acl 类应该如何查找状态。

        祝你好运!

        【讨论】:

        • 我选择了 squid 和 external_acl_type,效果很好。谢谢。
        • 我几乎可以确定我今天是否还需要这样做——我会在 node.js 中编写它
        【解决方案4】:

        我会使用squid,它可以执行其他程序来即时更改请求。

        【讨论】:

          猜你喜欢
          • 2011-06-11
          • 2011-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-25
          • 2010-10-15
          相关资源
          最近更新 更多