用Squid来实现Ajax跨域代理
2008-10-25 09:30
513 查看
转贴的,存个档以后备查
Squid是一个应用非常广泛、功能强大的代理服务器软件,用它自然是为了获得高效。
这里介绍一下squirm,这是一款为squid量身定做的redirector程序,支持 正规表达式 ,至于什么是redirector下面的工作原理你会知道它的作用。
系统平台:理论上支持上述软件的应该都可以(比如选择常见的linux),我这里以freebsd为例。
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端口,就作如下配置
Squid - squid.conf
squirm
- squirm.conf 主要指定redirector的匹配规则文件的位置
- common.patterns 这里的匹配规则文件是 common.patterns
...
什么是Ajax跨域代理?
玩Ajax的应该知道我在说什么:) 简单说就是因为浏览器的安全限制,你不能直接获取你站点以外的xml文档。为什么用Squid来做?
你完全可以自己写一个代理小程序,比如用php,这方面的资料网上很多。Squid是一个应用非常广泛、功能强大的代理服务器软件,用它自然是为了获得高效。
需要哪些软件?
Lighttpd(Apache)、Squid、squirm。 我这里以lighttpd为例,你完全可以用apache来代替。这里介绍一下squirm,这是一款为squid量身定做的redirector程序,支持 正规表达式 ,至于什么是redirector下面的工作原理你会知道它的作用。
系统平台:理论上支持上述软件的应该都可以(比如选择常见的linux),我这里以freebsd为例。
工作原理
用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
...
相关文章推荐
- 使用 web 代理实现 Ajax 跨域调用
- ajax跨域之---服务器端代理实现
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
- ajax跨域之---服务器端代理实现
- jsp代理实现ajax跨域调用获取数据
- AJAX实现跨域的三种方法(代理,JSONP,XHR2)
- AJAX实现跨域的三种种方法(代理,JSONP,XHR2)
- Ajax跨域代理访问网络资源的实现代码
- jsp实现 AJAX 跨域代理
- Ajax跨域代理访问网络资源的实现代码
- 使用 web 代理实现 Ajax 跨域调用
- 用反向代理nginx proxy_pass配置解决ie8 ajax请求被拦截问题 ie8用nginx代理实现跨域请求访问 nginx405正向代理request_uri
- AJAX实现跨域的三种种方法(代理,JSONP,XHR2)
- jQuery中Ajax+Spring MVC实现跨域请求
- ajax jsonp实现跨域请求
- 10、JSONP实现Ajax的跨域请求
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- 跨域资源共享(Cross-Origin Resource Sharing)实现Ajax跨域请求
- 跨域资源共享(Cross-Origin Resource Sharing)实现Ajax跨域请求