以前很多东西都是管理员给弄好,自己只要埋头写代码就好了,效率之类的完全不去考虑.
当问起这个事儿,管理员说:最后在外层拿varnish包一层缓存就好了.
varnish?
缓存?
完全云里雾里.
近来闲的无聊,抽空把varnish大概了解了一遍, 原来就是前端的文件缓存工具.
这种东西,感觉一定要折腾一下才有继续深入的动力,且想到VPS上这个wordpress博客,居然扛不住50的并发,相当的窝火啊(马大牛说可能是插件原因).就拿你开刀了.
因为nginx已经占用了80端口,而且包老板的网站也都在上面,其中有个dz论坛,这东西好像并不适合做文件缓存,这样就不能整体把nginx端口改为非80端口.所以就有了下面这个方案:
我想应该有更好的解决办法,知道的话还请不吝赐教,谢谢!
开始实施
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.
测试一下效果
拿webbench测一下,500并发量的情况下,CPU占用15.6%,感觉良好.
刷新下网站,依旧打不开,用 iftop 一看,带宽占满了.这个瓶颈就只能靠万能的RMB了...
问题
当给nginx设置一个非80端口并访问此域名时,总会跳到IP默认站点.(已解决:如何设置nginx的IP默认站点)
如果nginx不设置一个默认站点,依旧会访问到一个虚拟主机,没搞明白哪里设置出问题了.
varnish配置文件还只有个后端,其他规则需要继续折腾.