以前很多东西都是管理员给弄好,自己只要埋头写代码就好了,效率之类的完全不去考虑.

当问起这个事儿,管理员说:最后在外层拿varnish包一层缓存就好了.

varnish?

缓存?

完全云里雾里.

近来闲的无聊,抽空把varnish大概了解了一遍, 原来就是前端的文件缓存工具.

这种东西,感觉一定要折腾一下才有继续深入的动力,且想到VPS上这个wordpress博客,居然扛不住50的并发,相当的窝火啊(马大牛说可能是插件原因).就拿你开刀了.

因为nginx已经占用了80端口,而且包老板的网站也都在上面,其中有个dz论坛,这东西好像并不适合做文件缓存,这样就不能整体把nginx端口改为非80端口.所以就有了下面这个方案:

varnish+nginx

我想应该有更好的解决办法,知道的话还请不吝赐教,谢谢!

开始实施

1.安装varnish的方法官方写的很详细,直接链接过来.

2.安装完后修改 /etc/varnish/default.vcl.

backend default {
    .host = "yjiang.tk";
    .port = "8080";
}
sub vcl_recv {
    if (!(req.url ~ "wp-(login|admin)")) {
        unset req.http.cookie;
    }
}
sub vcl_deliver {   #输出命中状态到http_header
    set resp.http.x-hits = obj.hits ;
    if (obj.hits > 0) {
        set resp.http.X-Cache = "hit cache";
    }
    else {
        set resp.http.X-Cache = "miss cache";
    }
}
sub vcl_fetch {
    set beresp.grace = 60m;
    if (!(req.url ~ "wp-(login|admin)")) {
        unset beresp.http.set-cookie;
    }
}

3.简单写个脚本来重启varnish以及修改到默认的端口.

#!/bin/sh

if [ -z $1 ]
then
    echo "defalut port 8080 used"
    port=8080
else
    port=$1
fi

pkill varnish

varnishd -f /etc/varnish/default.vcl \
         -s file,/tmp/varnish_cache.data,128M \
         -a 0.0.0.0:$port

netstat -ntlp | grep varnish

4.nginx虚拟主机文件修改,把原来的80端口改为8080,并新增个一个反向代理到80端口.

   server {
    listen  80;
    server_name yjiang.tk;            #绑定域名
    location / {
        proxy_pass http://127.0.0.1:88;
        include /etc/nginx/proxy_params;
    }
}

server {
    listen  8080;
    server_name yjiang.tk;            #绑定域名 
    root /var/www/cake;                     #网站根目录
    index index.htm index.html index.php;   #默认文件
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;  #fastcig_params参数文件地址
    } 
    access_log  /var/log/nginx/access_cake.log;
    error_log  /var/log/nginx/error_cake.log;
}

5.执行重启varnish的脚本并重启nginx,OK.


测试一下效果

QQ图片20130606122509

webbench测一下,500并发量的情况下,CPU占用15.6%,感觉良好.

iftop_201430606

刷新下网站,依旧打不开,用 iftop 一看,带宽占满了.这个瓶颈就只能靠万能的RMB了...


问题

  • 当给nginx设置一个非80端口并访问此域名时,总会跳到IP默认站点.(已解决:如何设置nginx的IP默认站点

  • 如果nginx不设置一个默认站点,依旧会访问到一个虚拟主机,没搞明白哪里设置出问题了.

  • varnish配置文件还只有个后端,其他规则需要继续折腾.