我有以下需求:
- 网络应用程序在
http://mything.com/
. - 反向代理服务器位于
http://mything.com/proxy/
- 反向代理应该代理:
http://mything.com/proxy/http://bbc.co.uk/
例如。
- 反向代理应该代理:
- 反向代理应重写源页面 ( ) 中的所有链接、src、href 等,以
htp://bbc.co.uk
将它们从http://mything.com/proxy/$1
.
我们有 90% 的 Ruby 工作实现,开发为Rack应用程序,一系列 8 个中间件可以完成各种工作:
- 重写cookie域
- 从我们的网站注入一个 javascript 块
- 重写链接以适应代理。
诚然,我们的 Ruby 版本还不错,但是处理一个页面大约需要一秒钟,这速度非常慢,而且根本无法融合。当我们将 SSL 引入混合时,它会变得更糟,并且管理层正在讨论剥离所有 SSL,并且只使用 http。(这自然是目光短浅,而且非常愚蠢。)
这类问题必须通过 Squid 等工具和 ICAP 等协议草案得到更广泛的解决。
我想放弃我们自己开发的解决方案,因为它是持续痛苦的根源,而且速度很慢。
我刚来了解Squid的Content Adaptation功能,但还没有找到合适的方法让它发挥作用。
我可以看到以下我无法解决的问题:
- 如何从原始请求 URI 中提取 URL 组件?即我怎样才能把
.../proxy/(.*)
它用作后端地址? - 如何在 ICAP 程序中重写 cookie?即 ICAP 内容改编程序是否收到完整的请求?
- 如何使用 ICAP 重写 url、链接等?(Squirm看起来很有希望,但看起来事情必须进行硬编码(参见第 1 点。)即是否有任何更智能的工具可以简单地使用正则表达式/等?
我知道这个问题有被标记为“没有研究证据”的风险,但我已经处于我能够确定的范围内,而无需花费数天(或看起来如此)来学习鱿鱼的错综复杂,当我唯一需要的是重写一些内容时!