Varnish能做nginx正向代理理吗

专注云服务,云技术,云资讯的分享
当前位置:
神折腾:用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 中增加:
cache_vary on
acl IIS rep_header Server ^Microsoft-IIS
broken_vary_encoding allow IIS
<div class="crayon-num" data-line="crayon-588ca<div class="crayon-num crayon-striped-num" data-line="crayon-588ca<div class="crayon-num" data-line="crayon-588ca
cache_vary onacl IIS rep_header Server ^Microsoft-IISbroken_vary_encoding allow IIS
IIS6.0修改如下配置:
C:\Windows\system32\inetsrv\metabase.xml
HcNoCompressionForHttp10="TRUE"
HcNoCompressionForProxies="TRUE"
HcDoDynamicCompression="TRUE"
上面的“TRUE”都改成“FALSE”
C:\Windows\system32\inetsrv\metabase.xml HcNoCompressionForHttp10="TRUE"HcNoCompressionForProxies="TRUE"HcDoDynamicCompression="TRUE"上面的“TRUE”都改成“FALSE”
上述配置还是无法完美解决这样的问题。于是想到了要单独给这家小伙伴配置一个反向代理。
首先想到了 nginx,测试了一番之后无法实现,主要是 nginx 的 proxy_pass 方式仍然使用 http1.0 向后通讯。于是转向了使用 Varnish,目前最主要的问题就是对方使用了CDN,并且不让我们直接回原站取数据,这反向代理要去CDN取数据,开什么国际玩笑?人艰不拆啊!
不过决定还是要一试,这次使用了Varnish4.0.1,最近稳定版本,
下面是安装及配置步骤,重点是varnish 4.x版本支持多后端服务器,可采用不容算法,并支持健康检查,或许能满足万一一台CDN节点挂掉导致页面无法取回的现象。
Varnish安装
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum install varnish
或者手动下载rpm包: http://repo.varnish-cache.org/redhat/varnish-4.0/el6/x86_64/varnish/varnish-4.0.1-1.el6.x86_64.rpm
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpmyum install varnish&或者手动下载rpm包: http://repo.varnish-cache.org/redhat/varnish-4.0/el6/x86_64/varnish/varnish-4.0.1-1.el6.x86_64.rpm
# /usr/sbin/varnishd -V
varnishd (varnish-4.0.1 revision 4354e5e)
Copyright (c) 2006 Verdens Gang AS
Copyright (c)
Varnish Software AS
# /usr/sbin/varnishd -Vvarnishd (varnish-4.0.1 revision 4354e5e)Copyright (c) 2006 Verdens Gang ASCopyright (c) 2006-2011 Varnish Software AS
启动参数配置:
配置文件地址
centos/RHEL: /etc/sysconfig/varnish
Ubuntu:/etc/default/varnish
# cat /etc/sysconfig/varnish | grep -v ^#| grep -v ^$
NFILES=131072
MEMLOCK=82000
NPROCS="unlimited"
RELOAD_VCL=1
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_LISTEN_PORT=80
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_MIN_THREADS=50
VARNISH_MAX_THREADS=1000
VARNISH_THREAD_TIMEOUT=120
VARNISH_STORAGE_SIZE=256M
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
VARNISH_TTL=120
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-p thread_pool_min=${VARNISH_MIN_THREADS} \
-p thread_pool_max=${VARNISH_MAX_THREADS} \
-p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
1234567891011121314151617181920212223242526
# cat /etc/sysconfig/varnish | grep -v ^#| grep -v ^$NFILES=131072MEMLOCK=82000NPROCS="unlimited"RELOAD_VCL=1VARNISH_VCL_CONF=/etc/varnish/default.vclVARNISH_LISTEN_PORT=80VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1VARNISH_ADMIN_LISTEN_PORT=6082VARNISH_SECRET_FILE=/etc/varnish/secretVARNISH_MIN_THREADS=50VARNISH_MAX_THREADS=1000VARNISH_THREAD_TIMEOUT=120VARNISH_STORAGE_SIZE=256MVARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"VARNISH_TTL=120DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \&&&&&&&&&&&& -f ${VARNISH_VCL_CONF} \&&&&&&&&&&&& -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \&&&&&&&&&&&& -t ${VARNISH_TTL} \&&&&&&&&&&&& -p thread_pool_min=${VARNISH_MIN_THREADS} \&&&&&&&&&&&& -p thread_pool_max=${VARNISH_MAX_THREADS} \&&&&&&&&&&&& -p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \&&&&&&&&&&&& -u varnish -g varnish \&&&&&&&&&&&& -S ${VARNISH_SECRET_FILE} \&&&&&&&&&&&& -s ${VARNISH_STORAGE}"
启动方式:
# /etc/init.d/varnish
Usage: /etc/init.d/varnish {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
或者手动启动:
/usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread_pool_min=50 -p thread_pool_max=1000 -p thread_pool_timeout=120 -u varnish -g varnish -S /etc/varnish/secret -s malloc,256M
/usr/sbin/varnishd -f /etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:80
# /etc/init.d/varnish Usage: /etc/init.d/varnish {start|stop|status|restart|condrestart|try-restart|reload|force-reload}&或者手动启动:/usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread_pool_min=50 -p thread_pool_max=1000 -p thread_pool_timeout=120 -u varnish -g varnish -S /etc/varnish/secret -s malloc,256M /usr/sbin/varnishd -f /etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:80
varnish vcl 配置文件:
# cat /etc/varnish/default.vcl
acl localnetwork {
"localhost";
"192.168.0.0"/20;
backend foo{
.host = "";
.port = "80";
backend mysite01{
#.host = "";
.host = "112.90.172.80";
.port = "80";
backend mysite02{
#.host = "";
.host = "116.114.22.98";
.port = "80";
backend mysite03{
#.host = "";
.host = "123.125.19.13";
.port = "80";
sub vcl_init {
new vdir = directors.round_robin();
vdir.add_backend(mysite01);
vdir.add_backend(mysite03);
vdir.add_backend(mysite03);
sub vcl_recv {
if (req.http.host ~"^$") {
set req.http.host= "";
set req.backend_hint =
elsif (req.http.host ~"^$") {
set req.http.host= "";
set req.backend_hint = vdir.backend();
return(synth(404, "Unknown virtual host."));
#error 404 "Unknown virtual host";
if (req.http.Accept-Encoding) {
if(req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
elsif (req.http.Accept-Encoding ~ "deflate" ) {
set req.http.Accept-Encoding = "deflate";
#remove req.http.Accept-E
unset req.http.Accept-E
if (req.method == "PURGE") {
if (!client.ip ~ localnetwork) {
return(synth(405,"Not allowed."));
# jump to hit/miss
return (purge);
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
# cat /etc/varnish/default.vcl&vcl 4.0;&acl localnetwork {&&&&"localhost";&&&&"192.168.0.0"/20;}&backend foo{&&&&.host = "";&&&&.port = "80";}&backend mysite01{&&&&#.host = "";&&&&.host = "112.90.172.80";&&&&.port = "80";}&backend mysite02{&&&&#.host = "";&&&&.host = "116.114.22.98";&&&&.port = "80";}&backend mysite03{&&&&#.host = "";&&&&.host = "123.125.19.13";&&&&.port = "80";}&&sub vcl_init {&&&&new vdir = directors.round_robin();&&&&vdir.add_backend(mysite01);&&&&vdir.add_backend(mysite03);&&&&vdir.add_backend(mysite03);&& &}&sub vcl_recv {&&&&if (req.http.host ~"^$") {&&&&&&&&set req.http.host= "";&&&&&&&&set req.backend_hint =&&&&} &&&&elsif (req.http.host ~"^$") {&&&&&&&&set req.http.host= "";&&&&&&&&set req.backend_hint = vdir.backend();&&&&} &&&&else {&&&&&&&&return(synth(404, "Unknown virtual host."));&&&&&&&&#error 404 "Unknown virtual host";&&&&}&&&&&if (req.http.Accept-Encoding) {&&&&&&&&if(req.http.Accept-Encoding ~ "gzip") {&&&&&&&&&&&& set req.http.Accept-Encoding = "gzip";&&&&&&&&}&&&&&&&&elsif (req.http.Accept-Encoding ~ "deflate" ) {&&&&&&&&&&&&set req.http.Accept-Encoding = "deflate";&&&&&&&&}&&&&&&&&else {&&&&&&&&&&&&#remove req.http.Accept-E&&&&&&&&&&&&unset req.http.Accept-E&&&&&&&&}&&&&}&&&&&if (req.method == "PURGE") {&&&&&&&&if (!client.ip ~ localnetwork) {&&&&&&&&&&&&return(synth(405,"Not allowed."));&&&&&&&& }&&&&&&&& # jump to hit/miss&&&&&&&&&&&&return (purge);&&&&}&}
上述几个IP地址均为CDN地址,做了rr方式的轮询。
varnishstat:
Uptime mgt:
5+07:54:07
Uptime child: 5+07:54:04
MAIN.uptime
MAIN.sess_conn
MAIN.client_req
MAIN.cache_miss
MAIN.backend_conn
MAIN.backend_toolate
MAIN.backend_recycle
MAIN.fetch_length
MAIN.pools
MAIN.threads
100.00 100.00
MAIN.threads_created
MAIN.n_backend
MAIN.n_expired
MAIN.s_sess
MAIN.s_req
MAIN.s_fetch
MAIN.s_synth
MAIN.s_req_hdrbytes
MAIN.s_resp_hdrbytes
MAIN.s_resp_bodybytes
MAIN.sess_closed
MAIN.sess_readahead
MAIN.backend_req
MAIN.n_vcl
MAIN.vmods
MAIN.n_gunzip
MGT.uptime
SMA.s0.c_req
SMA.s0.c_bytes
SMA.s0.c_freed
SMA.s0.g_space
SMA.Transient.c_req
SMA.Transient.c_bytes
v MAIN.uptime
123456789101112131415161718192021222324252627282930313233343536373839
Uptime mgt:&& 5+07:54:07Uptime child: 5+07:54:04&&&NAME&&&&&&&&&&&&&&&&&& CURRENT&&&&&& CHANGE&&&&&&AVERAGE&&&&&& AVG_10&&&&&&AVG_100&&&& AVG_1000MAIN.uptime&&&&&&&&&&&&&& 460444&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.00MAIN.sess_conn&&&&&&&&&&&&&& 435&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.client_req&&&&&&&&&&&&&&423&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.cache_miss&&&&&&&&&&&&&&&&3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.backend_conn&&&&&&&&&&&&&&3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.backend_toolate&&&&&&&&&& 1&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.backend_recycle&&&&&&&&&& 3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.fetch_length&&&&&&&&&&&&&&3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.pools&&&&&&&&&&&&&&&&&&&& 2&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 2.00&&&&&&&& 2.00&&&&&&&& 2.00MAIN.threads&&&&&&&&&&&&&&&& 100&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&& 100.00 100.00&&&&&& 100.00MAIN.threads_created&&&&&&&& 100&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.n_backend&&&&&&&&&&&&&&&& 6&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 6.00&&&&&&&& 6.00&&&&&&&& 6.00MAIN.n_expired&&&&&&&&&&&&&&&& 3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 3.00&&&&&&&& 3.00&&&&&&&& 3.00MAIN.s_sess&&&&&&&&&&&&&&&&&&435&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_req&&&&&&&&&&&&&&&&&& 423&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_fetch&&&&&&&&&&&&&&&&&& 3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_synth&&&&&&&&&&&&&&&& 420&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_req_hdrbytes&&&&&&&&34959&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_resp_hdrbytes&&&&&& 87407&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.s_resp_bodybytes&&&& 173550&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.sess_closed&&&&&&&&&&&& 390&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.sess_readahead&&&&&&&&&&&&1&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.backend_req&&&&&&&&&&&&&& 3&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.n_vcl&&&&&&&&&&&&&&&&&&&& 1&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MAIN.bans&&&&&&&&&&&&&&&&&&&&&&1&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.00MAIN.vmods&&&&&&&&&&&&&&&&&&&& 1&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.00MAIN.n_gunzip&&&&&&&&&&&&&&&&&&2&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00MGT.uptime&&&&&&&&&&&&&&&&460447&&&&&&&& 1.00&&&&&&&& 1.00&&&&&&&& 1.09&&&&&&&& 1.09 &&&&&& 1.09SMA.s0.c_req&&&&&&&&&&&&&&&&&& 4&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00SMA.s0.c_bytes&&&&&&&&&&&& 46736&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00SMA.s0.c_freed&&&&&&&&&&&& 46736&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00SMA.s0.g_space&&&&&&&& &&&&&&&& 0.00&&&&&&&&&&.&&
SMA.Transient.c_req&&&&&&&&&&&&2&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00SMA.Transient.c_bytes&&&& 131744&&&&&&&& 0.00&&&&&&&&&&.&&&&&&&&&& 0.00&&&&&&&& 0.00&&&&&&&& 0.00v MAIN.uptime&&&&
再次测试,发现wget,curl中已经不用再传 http header Accept-Encoding了。
本文固定链接:
【上一篇】【下一篇】
您可能还会对这些文章感兴趣!
最新日志热评日志随机日志
日志总数:141 篇
评论总数:26 篇
标签数量:155 个
链接总数:2 个
建站日期:
运行天数:1107 天
最后更新:任何有多年客户端开发经验的开发者都应该知道复杂的文字渲染是怎么工作的.至少在2010年以前,我刚开始写libhwui的时候(这是一个基于Android2.0的2D绘画库),我就意识到处理文字有时会比其他方面更复杂,特别是当你尝试用GPU在屏幕上进行绘制的时候. 文字与Android Android上的文字渲染加速器硬件最初是由Renderscript团队写的,然后被很多工程师改进和优化,包括我和好友Chet Haase.在网络上,可以很容易找到很多关于怎么使用OpenGL ES渲染文字的教程.如
JEuclid 网站 : http://jeuclid.sourceforge.net/ JEuclid 是一个Java 的 MathML 的渲染器,用来将 MathML 标识语言转成形如下图的数学公式 支持的输出格式包括:JPEG, BMP, WBMP, GIF, SVG, EMF, PDF, PS, SWF JEuclid 由一个MathML浏览器.命令行转换工具.Ant转换任务.Awt和Swing组件.FO处理器等组成. 以下内容来自百度百科:
GMathml 网站 : https://blogs.gnome.org/emmanuel/category/gmathml/ GMathml 是一个 MathML 的渲染器,用来将 MathML 标识语言转成形如下图的数学公式 支持输出到 PNG/SVG/PDF 等格式. 以下内容来自百度百科: /view/631411.htm MathML?(Mathematical Markup Language?)即数学置标语言是一种基于XML的标准,用来在互
今天我们将要讲到的是大型站点的一种常用做法,将缓存部署在反向代理服务器上,这类缓存我们通常称之为反向代理缓存 到目前为止,我们讨论了把缓存存放在ASP.NET的输出缓存中(内存和硬盘),以及浏览器缓存中,而大型站点的另一种常用做法是将缓存部署在反向代理服务器上,这类缓存我们通常称之为反向代理缓存,比如Squid和Varnish.这两款软件通常都部署在非WINDOWS平台上,对于Windows平台上的Asp.net来说,其实一样能使用,我们完全可以把反向代理软件部署在LINUX上,然后代理会路由到
大约1个月前,我买了iPhone 4S,用这个新设备编写了些许代码.尽管这个设备不支持多渲染目标(游戏邦注:简称&MRT&),但是它支持对浮点渲染目标的渲染支持(仅限iPhone 4S和iPad2). 所以,我用light pre-pass渲染器来进行测试: 在测试中,通过3个后期处理过滤器(游戏邦注:flimic tone mapping.bloom和照片过滤器)实现HDR光照(游戏邦注:gamma的值为2.0而不是2.2).在测试场景中,3个方向光照和30点光照配合2个皮肤模型使用
NGINX反向代理缓存 四月 13, 2011 网上好多文章都是多台服务器 做缓存 然后反向代理到后台服务器 不过作为一个穷人哪来那么多服务器 所以我们要让NGINX既做WEB服务器也做缓存.. 这样同样也能起到加速效果..缓存当静态用.. 适合伪静态的网站使用..(PS:废话静态还需要缓存吗~~~!) http { #缓存配置 proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_s
完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义JSF组件(3) 使用绑定变量 开发自定义JSF组件(4) 保存状态与恢复状态 开发自定义JSF组件(5) 在JSP中用JSF组件 上一节教程中定义的组件,使用组件本身的encodeBegin方法输出了html代码,更好的方法是使用Render类来输出,为什么要单独使用另外一个类来输出html代码呢?这跟mvc设计有关,这里的组件(model)保存了java的各种属性,而
日期: 来源: Chrome的Canary频道和Sarafi的WebKit nightly build,这两者现在都已经支持CSS渲染器的Photoshop风格混合模式,Adobe将Photoshop样式的过滤工具带入了网络. 要应用最新的混合模式,你需要获取最新的Chrome Canary版本或者是WebKit nightly builds,在about:flags中启用CSS Shaders(CSS渲染器)选项,然后访问Adobe的示例代码. 以往,CSS
网站发展到一定阶段之后, 图片服务器压力过大, 所以配置成 ,源服务器 -& 缓存服务器 模式 首先览器访问的是 缓存服务器,缓存服务器判断是否有请求的图片,如果有则直接输出给浏览器,没有的话再从源服务器上请求过来,再输出给浏览器 缓存服务器(windows 2008 R2 + IIS 7 + URLRewrite模块 ) IIS 配置文件如下: Web.Config &?xml version=&1.0& encoding=&UTF-8&?& &
Varnish理论知识 一.Varnish 简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来. 挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squi
一个简单的负载均衡的示例,把均衡到本机不同的端口,也可以改为均衡到不同的地址上. http { : upstream myproject { : server 127.0.0.1:8000 weight=3 ; : server 127.0.0.1:8001; : server 127.0.0.1:8002; : server 127.0.0.1:8003; : } : server { : listen 80; : server_name www.domain.co
什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: 网关缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作 如何控制缓存和不缓存: HTML Meta标签 vs. HTTP头信息: Pragma HTTP头信息(以及为什么不起作用): 使用Expires HTTP头信息控制不过期: Cache-Control(缓存控制)HTTP头信息: 验证器和验证: 创建支持缓存网站的小技巧: 编写支持缓存的脚本: 常见问题解答: 实现需注意的:Web服务器端: 实
1.1 Web server Webserver 用来解析HTTP协议.当web 服务器接收到一个HTTP请求时,会返回一个HTTP响应,例如送回一个HTML页面.为了处理一个请求,web服务器可以响应一个静态页面或者图片.进行页面跳转,或者把动态响应的产生委托给一些其它的程序完成,比如CGI,JSP,servlets,ASP,PHP脚本. 当用户访问一个网站时,首先用户通过查询DNS服务器,得到该域名对应的IP地址,然后使用这个IP地址来进行访问.用户的请求是一个url地址,在web 服务器端
这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后面参考文档和更多深入阅读部分可能是你更需要的内容. 什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作: 如何控制(控制不)缓存: HTML Meta标签 vs. HTTP头信息: Pragma HTTP头信息(为什么
原文(英文)地址: http://www.mnot.net/cache_docs/ 版权声明:署名-非商业性使用-禁止演绎 2.0 这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后面参考文档和更多深入阅读部分可能是你更需要的内容. 什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: Web缓存无害吗?为什么要鼓励缓存? W
前篇博文把一个C++全局光照渲染器移植至C#,比较C++和C#之性能.刊出后,园友们不吝指出?中问题,例如嗷嗷发现C++实现里的随机产生器采用了比较复杂的运行时函数,造成Visual C++和Intel C++的巨大差异:赵姐夫发现C#版本用class竟然比struct快等等.修改这些问题后,园友QiaoJie亦提出,可同时测试C++/CLI,检测其所产生的IL代码,在同样的.Net平台上运行,看看是否比C#优胜.很多网友也提供了宝贵意见,未能尽录,唯有以努力撰文作为答谢.本人陆续移植了C++代
PHP高级应用学习笔记之 利用header()函数设置浏览器缓存 这涉及到4种头标类型: Last-Modified(最后修改时间); Expires(有效期限); Pragma(编译指示): Cache-Control(缓存控制); 前三个头标属于HTTP1.0标准.头标Last-Modified使用UTC日期时间值.如果缓存系统发现Last-Modified值比页面缓存版本的更接 近当前时间,他就知道应该使用来自服务器的新版本. Expires 表明了缓存版本何时应该过期(格林威治标准时间)
这篇文章主要介绍了举例理解Ruby on Rails的页面缓存机制,本文来自于IBM官方网站技术文档,需要的朋友可以参考下 有了页面缓存,Rails 就可以不再介入.在某种程度上,这是件好事,因为您的确可以获得优秀的性能.Rails 只需创建 HTML 页面,将其放入目录,之后,就可以置之于脑后.从那时起,就由应用服务器管理这些页面,且页面进入应用服务器无需任何循环.从性能的角度而言,页面缓存真是天赐之福. 我也钟爱页面缓存,Rails 使之简单利落.只需使用一行代码就可以启用缓存.如果再加入一
asp.net(C#) 开源资源大汇总,想要学习c#的朋友可以参考下 一.AOP框架Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率. NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP.NKalore的语法简单.直观,它的编译器是基于MonoC#编译器(MCS).NKalore目前只能在命
出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. 1.stats items 显示各个slab中item的数目. 2.stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表,显示格式:ITEM k
反向代理也是一种可以帮助实现网站静态化的重要技术,今天我就来讲讲反向代理这个主题.那么首先我们要了解下什么是反向代理.和反向代理相对应的是正向代理,正向代理也就是我们常说的代理服务,正向代理是非常常见的,例如在某些公司里我们想使用互联网,那么我们就得在浏览器里设置一个代理服务器,通过代理服务器我们才能正常使用互联网,而这个代理服务器就是一个正向代理服务器.正向代理更加让人熟悉的使用场景估计还是在FQ技术里的使用,我们使用一个放置在国外的代理服务器来访问那些在国内无法正常访问的网站,这其实也是在使
最近有多篇讨论程序语言趋势的博文,其中谈及到C#的性能问题.本人之前未做过相关测试,自己的回覆流于理论猜测,所以花了点时间做个简单实验,比较C#和C++的性能. 实验内容 赵姐夫在此回覆认为,C#比C/C++慢,主要在于.Net平台的垃圾回收(garbage collection, GC)机制.若是计算密集型应用,C#和C++产生的原生代码,速度应该相差不大.我对此半信半疑.想到之前看过一个用99行C++代码实现的全局照明(global illumination, GI)渲染程序smallpt,
缓存Web应用的方式有很多,他们通常都很复杂.随着应用基础设施的不断增加,基本的Rails页面缓存的管理变得越发单调乏味了. Rails 2.2通过HTTP headers:last_modified与etag引入了条件性GET.Ryan Tomayko遵循着RFC2616中的internet标准缓存说明引入了Rack::Cache. Rack::Cache是Rack中间件的一部分,它通过基本的存储方式(磁盘.堆及memcache)与针对缓存策略的配置系统实现了RFC2616中的大多数缓存特性.
感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助. 上次主要讨论缓存读写这块各种代码实现.本篇是就上次的问题接着来,继续看那些年我们各种缓存用法. 阅读目录: 一:缓存预热 二:多级缓存 2.1 介绍 2.2 线程缓存 2.3 内存缓存 2.4 文件缓存 2.5 分布式缓存 2.6 DB缓存 三:多层缓存 四:总结 一:缓存预热 上次有同学问过.在第一次加载时,我们的缓存都为空,怎么进行预热. 单机Web情况下,一般我们使用RunTimeCache.相对于这种情况下
虽然原生态的 WordPress 效率实在底下,但是 WordPress 提供了很多插件,国外服务器领域里也有很多开源的缓存软件,这几天在 Jerry 的帮忙下,萝卜网的服务器用上了 Varnish 缓存加速,现在每天轻松应付流量,系统的负载也不再升高,呵呵.这里贴一篇国外高手的文章,一些主流的 WordPress 缓存插件,以及和用上 Varnish 的 WordPress 性能的对比. 原文&WordPress Cache Plugin Benchmarks& 1.作者使用的插件下载以及版
作者 Benjamin Mestrallet and Tugdual Grall译者 张龙 发布于 日 上午9时14分 社区 Java 主题 门户/内容管理系统 标签 Portlets 我们很高兴地宣布,eXo平台发布了新的Portlet Container 2.0和Portal 2.1.eXo是第一个对生产者和消费者提供全面支持的Portal--支持新的Java Portlet 2.0 API(JSR 286)和Web Service Remote Portlet 2.0(W
剖析当代浏览器工作原理 Tali Garsiel (作者) – Developer, Incapsula, Paul Irish (编辑) – Developer Relations, Google August 16, 2011 Wu Min Qi(中文翻译)- Developer,IBM 原文链接:/en/tutorials/internals/howbrowserswork/ 前言 这部关于WebKit和Gecko内部机制的综合性文献是以色
1.缓存的优点 1) 缓存减少了冗余的数据传输,节省了网络费用. 2) 缓存缓解了网络瓶颈的问题,不需要更多的网络带宽就能更快的加载页面. 3) 缓存降低了对原始服务器的要求,服务器可以更快的响应. 2.缓存分类 1)私有缓存 常见就是我们的浏览器里内置的缓存. 2)公有缓存 常见的就是代理缓存,不多介绍. 3.缓存的处理流程 处理流程图,如上所示,下面分步骤具体介绍: 1)请求处理 用户发起一个http请求,缓存获取到URL,根据URL查找是否有匹配的副本,这个副本可能在内存中,也可能在本地磁
请求和响应对象 在 CakePHP 2.0 中请求和响应对象是新的.在之前的版本中,这些对象是用数组来表示的,相关的方法分散在RequestHandlerComponent.Router. Dispatcher 和 Controller 中.请求包含的信息上没有认证对象.在 2.0 中,CakeRequest 和 CakeResponse 用于此目的. CakeRequest CakeRequest 是 CakePHP 中的默认请求对象.它在请求数据中集成了一些咨询和交互特性. CakeReqe
-by 落杉 客户端缓存控制通常也会被叫做条件GET请求. 五种常用于控制客户端缓存的头标 Last-Modified (最后修改时间) ETag (实体标签) Expires (有效指示) Pragma (编译指示) Cache-Control (缓存控制) 1.Last-Modified 这个头标是一个响应头标,表示客户端(通常指浏览器)所请求资源在服务器端的最后修改时间,通常情况下客户端在接受这个头标后,在以后对这个资源的 请求会附带一个'If-Modified-Since'请求头标,而这
Spring3.1 已加缓存的实现,今天主要介绍一下Spring Cache的基本使用,要想使你的程序具体缓存的功能,首先需要在配置文件中增加以下配置: 1.如果使用Annotation 方式配置缓存,需要有以下配置: &cache:annotation-driven /& 默认的缓存管理器的名字为cacheManager,如果需要指定缓存管理器名称,需要指定其名称 如: &cache:annotation-driven cache-manager=&cacheManager&
HTTP性能的问题与方案 一个最终用户访问一个网页,从浏览器发出请求,到接受请求,时间大体上消耗在了以下几个部分: 建立tcp/ip握手连接. 浏览器向服务器传送请求数据. 服务器处理数据. 服务器返回数据. 如果用户请求的资源很少改变,像js,css,图片之类的静态文件,如果每次用户的请求都需要占用服务器资源去处理,再如果一个用户和服务器位于太平洋两岸,那么,时间就被浪费在了网络传输和服务器处理步骤上了.在这种情况下,应该使用cache. 像上图一样,在离用户最近的地方,增加一个缓存服务器,将
为什么要做web cache,我想大家最主要的是解决流量的压力.随着网站流量的提升,如果只是单台机器既处理静态文件,又处理动态脚本,显然效率很难上升,不能处理日益上涨的流量压力.与此同时某些网站的页面内容并不是经常变化,因此我们可以分两层架构来组织网站.前端web缓存+后端web服务器,可以参看这里配置nginx反向代理配置 前端web缓存有多重方式实现,原理就是队请求结果页面静态化并设置一个超时期限,缓存页面过期后,新请求到达时重新到后端web服务器获取内容更新:没有nginx前比较流行的方法
历经半年多的精心打磨,Cocos2d-x v3.0正式版本最终发布!相比于去年9月份的Cocos2d-x v3.0-alpha版,正式版本在渲染器.性能.兼容性.稳定性等方面都得到了质的提升,并新增对WinPhone8的支持. 此外,引擎团队更分别针对C++.Lua.JavaScript三种编程接口的使用体验做了大量提升,我们来看一下各语言的优化: C++基础底层优化:新渲染器.新API.性能飞跃 新的渲染器--更优雅, 更灵活,更易用:可创建渲染队列,每个节点独立发布渲染指令,分解draw命令
简介 技巧 1:在 Web 服务器上缓存常用数据 技巧 2:在 Application 或 Session 对象中缓存常用数据 技巧 3:在 Web 服务器磁盘上缓存数据和 HTML 技巧 4:避免在 Application 或 Session 对象中缓存非灵活组件 技巧 5:不要在 Application 或 Session 对象中缓存数据库连接 技巧 6:妙用 Session 对象 技巧 7:在 COM 对象中封装代码 技巧 8:晚点获取资源,早点释放资源 技巧 9:进程外的执行将牺牲可靠性
祥细内容: 简介 技巧 1:在 Web 服务器上缓存常用数据 技巧 2:在 Application 或 Session 对象中缓存常用数据 技巧 3:在 Web 服务器磁盘上缓存数据和 HTML 技巧 4:避免在 Application 或 Session 对象中缓存非灵活组件 技巧 5:不要在 Application 或 Session 对象中缓存数据库连接 技巧 6:妙用 Session 对象 技巧 7:在 COM 对象中封装代码 技巧 8:晚点获取资源,早点释放资源 技巧 9:进程外的执行
前言: 刚开始写这篇文章的时候选了一个很土的题目...&Unity3D优化全解析&.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己&文(dou)学(bi)&加工留下的余地就少了很多.但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时才去网上扒一些只言片语的资料.也恰逢年前,寻思着周末认真写点东西遇到节假日没准也没什么人读,所以索性就写了这篇临时的文章.题目很土,因为用了指向性很明确的&Unity3D&,让
灵感 孩童时期,我总是很喜欢玩Taito旗下的&The Newzealand Story&和&Rainbow Islands&.而近来,让我深深着迷的平台游戏是&Generic&,所以我便决定写下制作一款平台游戏的过程(如下图所示). 2d game(from wildbunny) 背景 首先,你会注意到这些游戏的背景中存在多个视差图层,通过一些区块我们很容易制作出这种效果. 背景(from wildbunny) 中景(from wildbunny) 观察这些区块为何会
HTML5规范终于在今年正式定稿,对于从事多年HTML5开发的人员来说绝对是一个重大新闻.数字天堂董事长,DCloud CEO王安也发表了文章,从开发者和用户两个角度分析了HTML对两个人群的优势.其实,关于HTML5的开发工具,我们以往的文章已经介绍了很多,而这次所分享的则是过去未提到或没有详细介绍但又实用的五个HTML5开发工具. 1.HTML5 Maker 在未来的几年里,HTML5动画将会成为一个很庞大的东西,并不仅仅因为它是显示Web动画的有效途径,还因为广告公司将会大量使用它.HTM
[编者按]Nifty运营网站已经有很长一段时间,而在基于HTML5的WYSIWYG网页制作平台推出后,用户在该公司建立的网站已超过5400万个,同时其中大部分网站的日PV都不到100.鉴于每个网页的PV都很低,因此传统的缓存策略并不适用.然而即使是这样,该公司也只使用了4个WebServer就完成了这些工作.近日,Wix首席后端工程师AviranMordo在&WixArchitectureatScale&的演讲中分享了他们的策略,下面我们一起看HighScalability创始人Tod
只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余的80%-90%时间花在了下载页面中的所有组件上. --Steve Souders 规则1--减少HTTP请求(Minimize HTTP Requests) 只有10%-20%的最终用户响应时间花在接收请求的HTML文档上,剩下的80%-90%时间都花在HTML文档所引用的所有组件(图片.脚本.样式表.Flash等)进行的HTTP请求上.因此,改善响应时间最简单的办法就是减少组件数量并由此减少HTTP请求数.减少组件数量通常会和
Apache和 Squid 是两种著名的代理缓存软件,但Squid 较 Apache 而言是专门的代理缓存服务器软件,其代理缓存的功能强大,支持 HTTP/1.1 协议,其缓存对象也较多:并且 Squid 的缓存管理模块和访问控制模块功能很强大.它们有一定的相似之处,所以在分析完Apache日志后再看Squid日志就容易多了. 1 Squid日志分类 Squid的日志系统相对比较完善,常用日志分为如下两个:分别是access.log 和cache.log. 作用: access.客户端使
在这篇新闻中,Adobe的James Ward与一起为你带来了Flex的另一种10大(对Adobe Flex的十大误解).Flex是一个开源的应用开发框架,用来构建运行在web(使用 Flash Player)或者桌面上(使用Adobe AIR)的富Internet应用.总之,Flex是一个强大易用的框架,但是今天让我们瞧瞧构建Flex应用时经常犯的错误. 对于Flex新手,请阅读InfoQ最近的Adobe Flex Basics以对该框架有一个快速的了解.下面是易犯的错误列表
Java EE 7 的简介 Java EE 作为一个企业应用的部署平台,具有很好的健壮性.能够提供强大的 Web 服务且非常易于部署.这些年来,通过其不断发展,它已大大简化了以服务器为中心的应用程序的开发.部署和管理,已经逐渐成为企业级开发的通用标准. 1999 年,Sun 正式发布了 J2EE 的第一个版本.但从 1999 年诞生的第一个 J2EE 版本一直到 J2EE 1.4 版本,虽然它已经具有了强大的功能,但仍不太被人们接受.这是因为连实现一个简单的 J2EE 程序,都需要大量的配置文件
Facebook上周发布了新版iOS应用,号称速度提升两倍.Facebook工程师Jonathan Dan在Facebook官方页面中撰文,介绍了新版iOS应用.Facebook iOS应用的发展历程以及开发思路.&创事记&特选取此文编译,供移动应用开发者参考. 我们今天(编者注:8月23日)发布了新版iOS应用,速度更快.更可靠.更易用.这款新应用标志着Facebook移动产品开发方式的转型,即深耕不同平台.为了便于你们理解这一转型,让我们回顾移动版Facebook的发展历程. Facebo
针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为基础,结合Web前端开发中内容-结构-表现-行为相分离的开发标准,提出一种将Web页面代码分为视图(View,页面静态部分,包括内容.结构.表现).模型(Model,负责数据缓存.数据校验与本地逻辑处理.发起ajax请求).控制器(Controller,负责用户和系统事件响应.模型和呈现器调度).呈现器(Renderer,对视图的渲染,控制器与事件的绑定.数据搜集
现在,网上关于讨论PermGen OOM的资料很多,但是深入分析PermGen区域内存溢出原因的资料很少.本篇文章尝试全面分析一下PermGen OOM的原因,其中涉及到了Java虚拟机运行时数据区.类型装载.类型卸载等,测试代码涉及到了JMX协议.相关前提知识如下: 1.Java类加载的基本原理 2.Java类型卸载相关的知识,http://www.blogjava.net/zhuxing/archive//217285.html 3.简要了解JMX协议,有关JMX协议可以
IPTABLES的使用 [实验目的] 1.理解iptables工作机理 2.熟练掌握iptables包过滤命令及规则 3.学会利用iptables对网络事件进行审计 4.熟练掌握iptables NAT工作原理及实现流程 5.学会利用iptables+squid实现Web应用代理 [实验原理] 一.iptables简介 从1.1内核开始,linux就已经具有包过滤功能了,在2.0的内核中我们采用ipfwadm来操作内核包过滤规则.之后在2.2内核中,采用了大家并不陌生的ipchains来控制内核
序言 越来越多的关键应用运行在J2EE(Java 2, Enterprise Edition)中,这些诸如银行系统和账单处理系统需要高的可用性(High Availability, HA),同时像Google和Yahoo这种大系统需要大的伸缩性.高可用性和伸缩性在今天高速增长的互连接的世界的重要性已经证实了.eBay于 1999年6月停机22小时的事故,中断了约230万的拍卖,使eBay的股票下降了9.2个百分点. J2EE集群是用来提供高可用性和伸缩性服务,同时支持容错处理的一种流行的技术.但
What is VirtualGL? (由于后面可能做Windows 3D redirection, 细看,译之.不少地方译得还有问题,Anyway! 先贴上来,再慢慢改吧!要不然可能永远不会再修饰了!) VirtualGL is an open source package that gives any Unix or Linux remote display software the ability to run OpenGL applications with full 3D hardwa
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.077 (s). 8 q(s)

我要回帖

更多关于 varnish反向代理 的文章

 

随机推荐