☆─────────────────────────────────────☆
nukq (悦) 于 (Fri Jul 14 18:18:56 2006) 提到:
发信人: nukq (悦), 信区: WebDev
标 题: 如何用Squid来实现Ajax跨域代理
发信站: 水木社区 (Fri Jul 14 18:17:17 2006), 站内
什么是Ajax跨域代理?
玩Ajax的应该知道我在说什么:) 简单说就是因为浏览器的安全限制,你不能直接获取你
站点以外的xml文档。
为什么用Squid来做?
你完全可以自己写一个代理小程序,比如用php,这方面的资料网上很多。
Squid是一个应用非常广泛、功能强大的代理服务器软件,用它自然是为了获得高效。
需要哪些软件?
Lighttpd(Apache)、Squid、squirm。 我这里以lighttpd为例,你完全可以用apache来
代替。
这里介绍一下squirm,这是一款为squid量身定做的redirector程序,支持 正规表达式
,至于什么是redirector下面的工作原理你会知道它的作用。
系统平台:理论上支持上述软件的应该都可以(比如选择常见的linux),我这里以fre
ebsd为例。
工作原理
用Lighttpd(Apache)的proxy模块作前端代理,把特定url的请求发送到squid,比如把
/service/proxy/*/
http://othersite.com/abc.xml 这样的请求发送给squid来处理。
squid通过squirm这个redirector对url进行修正(相当于url rewrite),通过squirm的
配置文件我们可以把上述url地址重定向为
http://othersite.com/abc.xml ,这个过程
对浏览器是透明的完全由squid完成。squid获取
http://othersite.com/abc.xml 后返
回给浏览器,这样我们就实现了跨域,在Ajax应用中你如果要获取其他站点的内容就在
url前加上 /service/proxy/*/ 即可。
关键配置
相关软件的基本配置网上很容易找到参考,我就不罗嗦了,下面给出关键的配置。
Lighttpd - lighttpd.conf,比如我们的squid将工作在6666端口,就作如下配置
$HTTP["url"] =~ "^/service/proxy/" {
proxy.server = (
"" => (
(
"host" => "127.0.0.1",
"port" => 6666
)
)
)
}
Squid - squid.conf
http_port 6666
redirect_program /usr/local/bin/squirm
redirect_children 5
redirect_rewrites_host_header on
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
squirm
- squirm.conf 主要指定redirector的匹配规则文件的位置
begin
network 0.0.0.0/0
log /var/squid/logs/squirm-private-match.log
abort-log /var/squid/logs/squirm-private-abort.log
pattern common.patterns all
end
- common.patterns 这里的匹配规则文件是 common.patterns
regex ^.*/service/proxy/\*/(.*)$ \1
...
ok,that's all.
原文地址
http://www.mipang.com/groups/tiandi/discuss/331.d13577b5f3/☆─────────────────────────────────────☆
kabbesy (封印者·Annual Anneal) 于 (Fri Jul 14 18:35:13 2006) 提到:
恩,cache如何丢弃?
还有干吗多个squidrm?
直接apache rewrite了不就得了
【 在 nukq (悦) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: nukq (悦), 信区: WebDev
: 标 题: 如何用Squid来实现Ajax跨域代理
: 发信站: 水木社区 (Fri Jul 14 18:17:17 2006), 站内
: 什么是Ajax跨域代理?
: 玩Ajax的应该知道我在说什么:) 简单说就是因为浏览器的安全限制,你不能直接获取你
: 站点以外的xml文档。
: 为什么用Squid来做?
: 你完全可以自己写一个代理小程序,比如用php,这方面的资料网上很多。
: Squid是一个应用非常广泛、功能强大的代理服务器软件,用它自然是为了获得高效。
: 需要哪些软件?
: Lighttpd(Apache)、Squid、squirm。 我这里以lighttpd为例,你完全可以用apache来
: 代替。
: 这里介绍一下squirm,这是一款为squid量身定做的redirector程序,支持 正规表达式
: ,至于什么是redirector下面的工作原理你会知道它的作用。
: 系统平台:理论上支持上述软件的应该都可以(比如选择常见的linux),我这里以fre
: ebsd为例。
: 工作原理
: 用Lighttpd(Apache)的proxy模块作前端代理,把特定url的请求发送到squid,比如把
: /service/proxy/*/
http://othersite.com/abc.xml 这样的请求发送给squid来处理。
: squid通过squirm这个redirector对url进行修正(相当于url rewrite),通过squirm的
: 配置文件我们可以把上述url地址重定向为
http://othersite.com/abc.xml ,这个过程
: 对浏览器是透明的完全由squid完成。squid获取
http://othersite.com/abc.xml 后返
: 回给浏览器,这样我们就实现了跨域,在Ajax应用中你如果要获取其他站点的内容就在
: url前加上 /service/proxy/*/ 即可。
: 关键配置
: 相关软件的基本配置网上很容易找到参考,我就不罗嗦了,下面给出关键的配置。
: Lighttpd - lighttpd.conf,比如我们的squid将工作在6666端口,就作如下配置
: $HTTP["url"] =~ "^/service/proxy/" {
: proxy.server = (
: "" => (
: (
: "host" => "127.0.0.1",
: "port" => 6666
: )
: )
: )
: }
: Squid - squid.conf
: http_port 6666
: redirect_program /usr/local/bin/squirm
: redirect_children 5
: redirect_rewrites_host_header on
: httpd_accel_host virtual
: httpd_accel_with_proxy on
: httpd_accel_uses_host_header on
: squirm
: - squirm.conf 主要指定redirector的匹配规则文件的位置
: begin
: network 0.0.0.0/0
: log /var/squid/logs/squirm-private-match.log
: abort-log /var/squid/logs/squirm-private-abort.log
: pattern common.patterns all
: end
: - common.patterns 这里的匹配规则文件是 common.patterns
: regex ^.*/service/proxy/\*/(.*)$ \1
: ...
: ok,that's all.
: 原文地址
http://www.mipang.com/groups/tiandi/discuss/331.d13577b5f3/☆─────────────────────────────────────☆
nukq (悦) 于 (Fri Jul 14 18:52:26 2006) 提到:
【 在 kabbesy (封印者·Annual Anneal) 的大作中提到: 】
: 恩,cache如何丢弃?
squid上的cache? 可以详加配置
浏览器上的cache? 可以每次构造唯一的url来解决
: 还有干吗多个squidrm?
: 直接apache rewrite了不就得了
如果能保证url进入squid之前就变成
http://www.othersite.com/xxx.xml这种形式,那么
squirm是多此一举了。
用apache rewrite 的 [P]也许可以,不过没实践过。
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Fri Jul 14 20:58:31 2006) 提到:
直接,lighttpd的rewrite,就可以了吧......
【 在 nukq (悦) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: nukq (悦), 信区: WebDev
: 标 题: 如何用Squid来实现Ajax跨域代理
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Fri Jul 14 20:59:05 2006) 提到:
nod,
cache倒是好说,
随便配配squid不让cache就OK了
【 在 kabbesy (封印者·Annual Anneal) 的大作中提到: 】
: 恩,cache如何丢弃?
: 还有干吗多个squidrm?
: 直接apache rewrite了不就得了
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Fri Jul 14 21:10:00 2006) 提到:
这个怎么做? rewrite后的url怎么传递给proxy?
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 直接,lighttpd的rewrite,就可以了吧......
☆─────────────────────────────────────☆
bigfatcat (手机坏,请发站内信) 于 (Fri Jul 14 21:27:39 2006) 提到:
直接就暴露了一个代理,任何人都可以用这个去攻击其他服务器……
自找麻烦……
【 在 nukq (悦) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: nukq (悦), 信区: WebDev
: 标 题: 如何用Squid来实现Ajax跨域代理
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Fri Jul 14 22:33:54 2006) 提到:
-。-
【 在 bigfatcat (手机坏,请发站内信) 的大作中提到: 】
: 直接就暴露了一个代理,任何人都可以用这个去攻击其他服务器……
: 自找麻烦……
☆─────────────────────────────────────☆
tbao (CS) 于 (Fri Jul 14 23:42:41 2006) 提到:
.......
【 在 bigfatcat (手机坏,请发站内信) 的大作中提到: 】
: 直接就暴露了一个代理,任何人都可以用这个去攻击其他服务器……
: 自找麻烦……
☆─────────────────────────────────────☆
tbao (CS) 于 (Fri Jul 14 23:49:23 2006) 提到:
scaner同学的常用配置:
$HTTP["host"] == "xxx.com" {
url.rewrite-repeat = ( "...../(.+?).xml" => "/xxx/$1.xml" )
proxy.server = (
"/xxx" => (
("host"=>"127.0.0.1",
"port"=>8080)
)
)
}
【 在 nukq (悦) 的大作中提到: 】
: 这个怎么做? rewrite后的url怎么传递给proxy?
☆─────────────────────────────────────☆
nukq (悦) 于 (Sat Jul 15 00:03:45 2006) 提到:
squid在8080? 能行不?
不用redirector,怎么让squid知道 /xxx/
http://www.abc.com/a.xml是要
到 www.abc.com上拖 a.xml呢?
【 在 tbao (CS) 的大作中提到: 】
: 标 题: Re: 如何用Squid来实现Ajax跨域代理 (转载)
: 发信站: 水木社区 (Fri Jul 14 23:49:23 2006), 站内
:
: scaner同学的常用配置:
:
:
: $HTTP["host"] == "xxx.com" {
: url.rewrite-repeat = ( "...../(.+?).xml" => "/xxx/$1.xml" )
: proxy.server = (
: "/xxx" => (
: ("host"=>"127.0.0.1",
: "port"=>8080)
: )
: )
: }
:
:
: 【 在 nukq (悦) 的大作中提到: 】
: : 这个怎么做? rewrite后的url怎么传递给proxy?
:
:
: --
:
:
: ※ 修改:·tbao 于 Jul 14 23:53:03 修改本文·[FROM: 219.142.143.*]
: ※ 来源:·水木社区 newsmth.net·[FROM: 219.142.143.*]
☆─────────────────────────────────────☆
tbao (CS) 于 (Sat Jul 15 00:14:58 2006) 提到:
直接lighttpd搞定了,不用squid之类...
$HTTP["host"] == "www.def.com" {
url.rewrite-repeat = ( "^/proxy/www.abc.com/(.+?).xml" => "/demo/$1.xml" )
proxy.server = (
"/demo/" => (
("host"=>"www.abc.com",
"port"=>80)
)
)
}
访问
http://www.def.com/proxy/www.abc.com/a.xml或者
http://www.def.com/demo/a.xml最终会返回
http://www.abc.com/demo/a.xml【 在 nukq (悦) 的大作中提到: 】
: squid在8080? 能行不?
: 不用redirector,怎么让squid知道 /xxx/
http://www.abc.com/a.xml是要
: 到 www.abc.com上拖 a.xml呢?
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Sat Jul 15 00:58:57 2006) 提到:
【 在 tbao (CS) 的大作中提到: 】
: 标 题: Re: 如何用Squid来实现Ajax跨域代理 (转载)
: 发信站: 水木社区 (Sat Jul 15 00:14:58 2006), 站内
:
: 直接lighttpd搞定了,不用squid之类...
:
: $HTTP["host"] == "www.def.com" {
: url.rewrite-repeat = ( "^/proxy/www.abc.com/(.+?).xml" => "/demo/$1.xml" )
: proxy.server = (
: "/demo/" => (
: ("host"=>"www.abc.com",
~~~~~~~~~~~~~~~~~~要求host可变的
: "port"=>80)
: )
: )
: }
:
: 访问
http://www.def.com/proxy/www.abc.com/a.xml或者
http://www.def.com/demo/a.xml: 最终会返回
http://www.abc.com/demo/a.xml:
: 【 在 nukq (悦) 的大作中提到: 】
: : squid在8080? 能行不?
: : 不用redirector,怎么让squid知道 /xxx/
http://www.abc.com/a.xml是要
: : 到 www.abc.com上拖 a.xml呢?
: : ...................
:
: --
:
:
: ※ 修改:·tbao 于 Jul 15 00:23:14 修改本文·[FROM: 219.142.143.*]
: ※ 来源:·水木社区 newsmth.net·[FROM: 219.142.143.*]
☆─────────────────────────────────────☆
DavidZhu (大计划) 于 (Sun Jul 16 13:22:43 2006) 提到:
直接这么玩squid还不如用个proxyServlet来代理下,把squid藏起来作为基础设施之一,回头还可以换别的
bea上有篇文章大意如此(好像是用来推销weblogic的托……)
【 在 tbao (CS) 的大作中提到: 】
: scaner同学的常用配置:
: $HTTP["host"] == "xxx.com" {
: url.rewrite-repeat = ( "...../(.+?).xml" => "/xxx/$1.xml" )
: ...................
☆─────────────────────────────────────☆
bigfatcat (手机坏,请发站内信) 于 (Sun Jul 16 13:23:56 2006) 提到:
不一定要基于weblogic了,这样的servlet又不难做
重点是应该放在应用程序服务器内部做,不能不设防
【 在 DavidZhu (大计划) 的大作中提到: 】
: 直接这么玩squid还不如用个proxyServlet来代理下,把squid藏起来作为基础设施之一,回头还可以换别的
: bea上有篇文章大意如此(好像是用来推销weblogic的托……)
☆─────────────────────────────────────☆
soff (齐达内: 我顶你个肺!) 于 (Wed Jul 19 23:56:37 2006) 提到:
proxy.server 的 host 不支持域名,咋整?
【 在 tbao (CS) 的大作中提到: 】
: scaner同学的常用配置:
: $HTTP["host"] == "xxx.com" {
: url.rewrite-repeat = ( "...../(.+?).xml" => "/xxx/$1.xml" )
: ...................
修改:tbao FROM 219.142.143.*
FROM 219.142.143.*