当前位置: 首页 > linux > 正文

神折腾:用varnish处理gzip,并为CDN提供反向代理

故事是这样的: 一合作小伙伴使用的 IIS6.0 搭建的wap站点,并使用了国内某家CDN,我们自己的 squid 缓存CDN的内容再返回给其他客户(晕没?)。之前一直好好的,近期这家小伙伴运维给IIS6的css,js等静态文件加了压缩。问题来了,我们的 squid 无法从CDN上获取css,js等文件,导致页面加载异常,这跟 varnish 有毛线关系?且往下看。

分析其原因是我们的 squid2.7 对http1.1支持的不完整,客户端必须要传入[Accept-Encoding: “gzip, deflate”] 才能正常访问,测试时使用浏览器均和一正常访问,但是wget和curl等命令默认不行,必须传Accept-Encoding才行。而且无论是对方的CDN还是源站均有这样的问题。

网上这样的解决办法:
squid2.7版本: 在 squid.conf 中增加:

IIS6.0修改如下配置:

上述配置还是无法完美解决这样的问题。于是想到了要单独给这家小伙伴配置一个反向代理。
首先想到了 nginx,测试了一番之后无法实现,主要是 nginx 的 proxy_pass 方式仍然使用 http1.0 向后通讯。于是转向了使用 Varnish,目前最主要的问题就是对方使用了CDN,并且不让我们直接回原站取数据,这反向代理要去CDN取数据,开什么国际玩笑?人艰不拆啊!

不过决定还是要一试,这次使用了Varnish4.0.1,最近稳定版本,官网地址
下面是安装及配置步骤,重点是varnish 4.x版本支持多后端服务器,可采用不容算法,并支持健康检查,或许能满足万一一台CDN节点挂掉导致页面无法取回的现象。

Varnish安装

版本:

启动参数配置:
配置文件地址
centos/RHEL: /etc/sysconfig/varnish
Ubuntu:/etc/default/varnish

启动方式:

varnish vcl 配置文件:

上述几个IP地址均为CDN地址,做了rr方式的轮询。

varnishstat:

再次测试,发现wget,curl中已经不用再传 http header Accept-Encoding了。

本文固定链接: https://www.sudops.com/varnish-gzip-cache-cdn.html | 运维·速度

该日志由 Fisher 于2014年07月06日发表在 linux 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 神折腾:用varnish处理gzip,并为CDN提供反向代理 | 运维·速度
关键字:

神折腾:用varnish处理gzip,并为CDN提供反向代理:等您坐沙发呢!

发表评论


Time limit is exhausted. Please reload the CAPTCHA.

快捷键:Ctrl+Enter