首页 > 技术笔记 > Linux > 使用varnish 4代理处理jsonp接口
2016
08-29

使用varnish 4代理处理jsonp接口

背景

使用varnish是一个很不错的HTTP加速方案,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。然而varnish默认情况下是以url进行hash,来标识缓存,所以对于jsonp这种带有callback参数的请求,每一次callback都不一样,很可能会生成大量重复数据,占用内存空间,浪费资源。最近就遇到了这个问题,好在这个还是有解决办法的。

实现原理

其实jsonp很简单,就是json数据加一个callback和一对括号就可以了,所以只要我们取到没有callback的json数据,并进行缓存,再把数据用标签包起来就可以了。是的,就是这么简单,但是如何实现呢? 其实实现起来也很简单,在varnish 4的VCL里面其实可以使用synthetic来组合数据,但是这个函数又只能在vcl_synth和vcl_backend_error内使用,其中vcl_synth是用来处理错误的,而vcl_backend_error是用来处理后端服务器错误,所以我们就必须先抛出错误,然后读取json数据,再进行拼接,然后返回。 这里拼接数据时还需要用到varnish的Edge Side Includes(ESI)。

代码示例

注意

这里的代码是varnish 4.*版本的代码示例,如果使用了其他版本的varnish配置可能有所不同。如果使用较低版本,varnish 4里面有些语法已经变更。使用时可能需要修改一下。
最后编辑:
作者:射雕天龙
转载请注明:转载自射雕天龙的博客(http://blog.wangjunfeng.com)
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。