热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Varnish加速图片文件访问

varnish是和squid类似的高性能开源HTTP加速器,我这里用来缓存图片,js,css等小文件varnishcache192.168.0.15centos6.0nagioswww后端192.168.0.11centos5.31.安装varnishwgethttp://repo.varnish-cache.org/

varnish是和squid类似的高性能开源HTTP加速器,我这里用来缓存图片,js,css等小文件

varnish cache 192.168.0.15 centos6.0
nagios www后端 192.168.0.11 centos5.3

1.安装varnish

wget http://repo.varnish-cache.org/source/varnish-3.0.0.tar.gz

tar zxvf varnish-3.0.0.tar.gz

cd varnish-3.0.0

./configure --prefix=/opt/varnish-3.0.0

make

make install

ln -s /opt/varnish-3.0.0 /opt/varnish

2.设置权限

cd /opt/varnish

#varnish以www:website来运行

chown -R www:website /opt/varnish/var/varnish/

mkdir /var/log/varnish

chown -R www:website /var/log/varnish

chown -R www:website /opt/varnish/var/varnish/`hostname`

mkdir /opt/varnish/var/varnish/`hostname`

3.配置文件

#查看默认配置文件
cat etc/varnish/default.vcl

#编辑新配置文件
vi etc/vcl.conf

4.启动varnish

/opt/varnish/sbin/varnishd -n /opt/varnish/var/varnish -f /opt/varnish/etc/vcl.conf -a 0.0.0.0:80 -s malloc,1G -g website -u www  -T 127.0.0.1:3200 -p sess_workspace=64768 -p thread_pools=2 -p listen_depth=4096 -p first_byte_timeout=10 -p sess_timeout=15 -w 200,5000,10

#参数说明

-n vcache /              #临时文件实例名.如果以"/"开头,就必须是一个可用的路径.

        -a :80 /       #服务所在端口.":80"是默认所有网络都建立80端口,":"前面是服务器IP.

        -T :5000 /          #管理端口.

        -s file,/data1/vcache,80g /                        #虚拟内存文件映射类型,路径以及容量. 包括两种类型"malloc"和"file"

        -s file,/data2/vcache,80g /                        #malloc是内存+swap交换模式.很简单.没得说.

        -s file,/data3/vcache,80g /                        #file是mmap的文件内存映射机制.(具体情况,参阅"mmap"函数说明)

        -s file,/data4/vcache,80g /

        -f /usr/local/varnish/etc/varnish.vcl /           #VCL文件路径.

        -P /var/run/varnish.pid /          #PID文件地址.

        -w 200,5000,10 /     #工作进程数.三个参数分别是:,,

        -h classic,16383 /    #hash列表类型,以及长度.默认长度是16383.具体用处和调整实际效果要等我看完源代码才知道.

        -p user=www /    #"-p"是变量配置参数

        -p group=website/                  #服务运行用户和用户组配置.

        -p thread_pools=4 /                #进程connections pools的个数,数量越多,越耗用cpu和mem,但是处理并发能力越强.

                 #系统手册上说,一个cpu用一个.

        -p listen_depth=4096 /            #TCP队列长度.默认是1024.

        -p first_byte_timeout=10         #从后端接受第一个字节的超时时间。默认60秒

        -p between_bytes_timeout=60                    #从后端接收数据后,连接空闲时间,默认60秒

        -p sess_timeout=15    #客户端和varnish连接超时时间,默认5秒

5.记录日志
/opt/varnish/bin/varnishncsa -n /opt/varnish/var/varnish -w /var/log/varnish/varnish.log &

#定时切割日志
vi /opt/shell/cutvarnishlog.sh

#!/bin/sh

# 0 0 * * * /bin/sh /opt/shell/cutvarnishlog.sh  > /dev/null 2>&1

date=$(date -d "yesterday" +"%Y%m%d")

pkill -9 varnishncsa

mv /var/log/varnish/varnish.log /var/log/varnish/varnish.${date}.log

/opt/varnish/bin/varnishncsa -n /opt/varnish/var/varnish -w /var/log/varnish/varnish.log &

mkdir -p /var/log/varnish/old

gzip -c /var/log/varnish/varnish.${date}.log > /var/log/varnish/old/varnish.${date}.log.gz

rm -f /var/log/varnish/varnish.${date}.log

rm -f /var/log/varnish/old/varnish$(date -d "-1 month" +"%Y%m*").log.gz

crontab -e

0 0 * * * /bin/sh /opt/shell/cutvarnishlog.sh  > /dev/null 2>&1

6.查看运行统计
/opt/varnish/bin/varnishstat -n /opt/varnish/var/varnish

1+01:13:37       /opt/varnish/var/varnish

Hitrate ratio:       10      100      288

Hitrate avg:     0.9987   0.9981   0.9978

    22251295       371.40       245.01 client_conn - Client connections accepted

    22250487       371.40       245.00 client_req - Client requests received

    22185321       371.40       244.29 cache_hit - Cache hits

       62904         0.00         0.69 cache_miss - Cache misses

        4615         0.00         0.05 backend_conn - Backend conn. success

          22         0.00         0.00 backend_fail - Backend conn. failures

       59164         0.00         0.65 backend_reuse - Backend conn. reuses

         456         0.00         0.01 backend_toolate - Backend conn. was closed

       59622         0.00         0.66 backend_recycle - Backend conn. recycles

       47470         0.00         0.52 fetch_length - Fetch with Length

       16307         0.00         0.18 fetch_chunked - Fetch chunked

           2         0.00         0.00 fetch_close - Fetch wanted close

        1873          .            .   n_sess_mem - N struct sess_mem

        1834          .            .   n_sess - N struct sess

         655          .            .   n_object - N struct object

         685          .            .   n_objectcore - N struct objectcore

         784          .            .   n_objecthead - N struct objecthead

         405          .            .   n_waitinglist - N struct waitinglist

           2          .            .   n_vbc - N struct vbc

          31          .            .   n_wrk - N worker threads

         381         0.00         0.00 n_wrk_create - N worker threads created

        2584         0.00         0.03 n_wrk_queued - N queued work requests

           2          .            .   n_backend - N backends

       62227          .            .   n_expired - N expired objects

     5365503          .            .   n_lru_moved - N LRU moved objects

        1362         0.00         0.01 losthdr - HTTP header overflows

    18551363       326.47       204.27 n_objwrite - Objects sent with write

    22251295       371.40       245.01 s_sess - Total Sessions

    22250487       371.40       245.00 s_req - Total Requests

         898         0.00         0.01 s_pass - Total pass

       63779         0.00         0.70 s_fetch - Total fetch

  7539848276    127352.96     83022.43 s_hdrbytes - Total header bytes 

141933911830   2248780.45   1562856.20 s_bodybytes - Total body bytes   

    22251292       371.40       245.01 sess_closed - Session Closed

           1         0.00         0.00 sess_herd - Session herd

   998035729     16610.26     10989.53 shm_records - SHM records

    89193699      1488.60       982.13 shm_writes - SHM writes

      328009         8.99         3.61 shm_cont - SHM MTX contention

         385         0.00         0.00 shm_cycles - SHM cycles through buffer

        1387         0.00         0.02 sms_nreq - SMS allocator requests

7.管理清除缓存
7.1通过Varnish管理端口进行管理
/opt/varnish/bin/varnishadm -T 127.0.0.1:3200 help

CLI connected to 127.0.0.1:3200

help [command]

ping [timestamp]

auth response

quit

banner

status

start

stop

vcl.load

vcl.inline

vcl.use

vcl.discard

vcl.list

vcl.show

param.show [-l] []

param.set

panic.show

panic.clear

storage.list

ban.url

ban [&& ]...

ban.list

通过Varnish管理端口清除缓存,支持正则表达式,1.0时为url.purge参数:
/opt/varnish/bin/varnishadm -T 127.0.0.1:3200 ban.url /shanghai-4.html

例:清除所有缓存:
/opt/varnish/bin/varnishadm -T 127.0.0.1:3200 ban.url *$

7.2通过telnet方式清除

telnet 127.0.0.1 3200

Trying 127.0.0.1 ...

Connected to 127.0.0.1.

Escape character is '^]'.

200 205     

-----------------------------

Varnish Cache CLI 1.0

-----------------------------

Linux,2.6.32-71.el6.i686,i686,-smalloc,-smalloc,-hcritbit

Type 'help' for command list.

Type 'quit' to close CLI session.

help

200 401     

help [command]

ping [timestamp]

auth response

quit

banner

status

start

stop

vcl.load

vcl.inline

vcl.use

vcl.discard

vcl.list

vcl.show

param.show [-l] []

param.set

panic.show

panic.clear

storage.list

ban.url

ban [&& ]...

ban.list

#1.0时的方法现在不支持

purge.url /shanghai-4.html

200 0 101 44     

Unknown request.

Type 'help' for more info.

#正确方法

ban.url /shanghai-4.html

200 0

7.3通过php等其它web请求清除缓存

function purge($ip,$port=80,$domain, $url) 

    $errstr = ''; 

    $errno = ''; 

    $fp = fsockopen ($ip, $port, $errno, $errstr, 2); 

    if (!$fp) 

    { 

         return false; 

    } 

    else 

    { 

        $out = "PURGE $url HTTP/1.1\r\n"; 

        $out .= "Host:$domain\r\n"; 

        $out .= "Connection: close\r\n\r\n"; 

        fputs ($fp, $out); 

        $out = fgets($fp , 4096); 

        fclose ($fp); 

        return true; 

    } 

purge('192.168.0.15','80','blog.c1gstudio.com','/shanghai-4.html');

8.varnish的nginx前端
测试下来nginx和varnish在同一机器上会产生大量time_wait,单独使用没有问题.

upstream mysvr {

server 127.0.0.1:82;

     }

     server

     {

             listen       80;

             server_name  static.c1gstudio.net;

             index index.html index.htm index.php;

             root  /opt/lampp/htdocs/web;

       location ~/\.ht {

         deny all;

     }

       location ~(favicon.ico) {

                 log_not_found off;

expires 99d;

break;

     }

             location ~ .*\.(php|html|htm)?$

             {

return 403;      

             }

     location / {

valid_referers none blocked *.c1gstudio.com *.c1gstudio.net ;

if ($invalid_referer) {

    rewrite ^/ http://leech.c1gstudio.com/leech.gif;

    return 412;

    break;

}

  proxy_pass http://mysvr;

  proxy_set_header   Host             $host;

  proxy_set_header   X-Real-IP        $remote_addr;

  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

     }           

             access_log  /var/log/nginx/static.c1gstudio.net.log  access;

     }

9.内核优化
vi /etc/sysctl.conf

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_synCOOKIEs = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 5000    65000

sysctl -p

varnish服务器运行基本没有负载

top - 15:54:34 up 34 days, 23:49,  1 user,  load average: 0.00, 0.01, 0.00

Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie

Cpu(s):  1.8%us,  1.3%sy,  0.0%ni, 95.0%id,  0.4%wa,  0.0%hi,  1.5%si,  0.0%st

Mem:   2070548k total,  2017996k used,    52552k free,    83556k buffers

Swap:  2097144k total,        0k used,  2097144k free,  1612756k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   

26631 www       20   0  228m 134m  81m S  7.6  6.7  74:46.86 varnishd                   

 6070 www       20   0 31852  25m 1000 S  3.3  1.3   7:28.79 nginx                     

 6071 www       20   0 31076  24m 1000 S  2.0  1.2   7:22.34 nginx                     

 6068 www       20   0 31356  25m  976 S  1.7  1.3   7:21.36 nginx

tcp状态
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

LAST_ACK 9

SYN_RECV 5

CLOSE_WAIT 3

ESTABLISHED 2083

FIN_WAIT1 95

FIN_WAIT2 247

TIME_WAIT 14412


推荐阅读
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
author-avatar
书友69132746
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有