centos安装配置varnish
如果再整合DNS,GeoIP,Nginx可就称得上私有的CDN服务了!
[root@Centos ~]# yum install logrotate libgomp gcc cpp binutils kernel-headers glibc-headers glibc-devel -y #安装所需环境 [root@Centos ~]# rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm #安装varnish [root@Centos ~]# yum install varnish -y #安装varnish [root@Centos ~]# service varnish start Starting Varnish Cache: [ OK ] [root@Centos ~]# cp /etc/sysconfig/varnish /etc/sysconfig/varnish.default #备份varnish默认的配置文件 [root@Centos ~]# sed -i '/VARNISH_LISTEN_PORT=6081/s/6081/80/' /etc/sysconfig/varnish #varnish默认端口为6081,改为80 [root@Centos ~]# cp /etc/varnish/default.vcl /etc/varnish/default.vcl.default #备份varnish默认的配置文件 [root@Centos ~]# vi /etc/varnish/default.vcl #修改backend的值 backend default { .host = "目标IP或域名"; .port = "目标端口"; } [root@Centos ~]# cp /etc/sysconfig/varnish /etc/sysconfig/varnish.default [root@Centos ~]# vim /etc/sysconfig/varnish VARNISH_STORAGE_SIZE=50% #缓存文件大小 [root@Centos ~]# more /etc/varnish/default.vcl #只缓存文本文件js等跟图片 backend default { .host = "baiqiuyi.com"; .port = "80"; } sub vcl_recv { remove req.http.X-real-ip; set req.http.X-real-ip = client.ip; set req.http.X-Forwarded-For = client.ip; if (req.request == "GET" && req.url ~ "^/[^?]+\.(jpeg|jpg|png|gif|ico|swf|js|css|txt)(\?.*|)$") { unset req.http.Cookie; } if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") { unset req.http.cookie; } } sub vcl_fetch { if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") { unset beresp.http.set-cookie; } if (req.request == "GET" && req.url ~ "\.(js|css|jpg|png|gif|jpeg|ico)$") { set beresp.ttl = 365d; } }
以下为varnishi的linux版默认配置文件
# This is a basic VCL configuration file for varnish. See the vcl(7) # man page for details on VCL syntax and semantics. # # Default backend definition. Set this to point to your content # server. # backend default { .host = "127.0.0.1"; .port = "80"; } # # Below is a commented-out copy of the default VCL logic. If you # redefine any of these subroutines, the built-in logic will be # appended to your code. # sub vcl_recv { # if (req.restarts == 0) { # if (req.http.x-forwarded-for) { # set req.http.X-Forwarded-For = # req.http.X-Forwarded-For + ", " + client.ip; # } else { # set req.http.X-Forwarded-For = client.ip; # } # } # if (req.request != "GET" && # req.request != "HEAD" && # req.request != "PUT" && # req.request != "POST" && # req.request != "TRACE" && # req.request != "OPTIONS" && # req.request != "DELETE") { # /* Non-RFC2616 or CONNECT which is weird. */ # return (pipe); # } # if (req.request != "GET" && req.request != "HEAD") { # /* We only deal with GET and HEAD by default */ # return (pass); # } # if (req.http.Authorization || req.http.Cookie) { # /* Not cacheable by default */ # return (pass); # } # return (lookup); # } # # sub vcl_pipe { # # Note that only the first request to the backend will have # # X-Forwarded-For set. If you use X-Forwarded-For and want to # # have it set for all requests, make sure to have: # # set bereq.http.connection = "close"; # # here. It is not set by default as it might break some broken web # # applications, like IIS with NTLM authentication. # return (pipe); # } # # sub vcl_pass { # return (pass); # } # # sub vcl_hash { # hash_data(req.url); # if (req.http.host) { # hash_data(req.http.host); # } else { # hash_data(server.ip); # } # return (hash); # } # # sub vcl_hit { # return (deliver); # } # # sub vcl_miss { # return (fetch); # } # # sub vcl_fetch { # if (beresp.ttl <= 0s || # beresp.http.Set-Cookie || # beresp.http.Vary == "*") { # /* # * Mark as "Hit-For-Pass" for the next 2 minutes # */ # set beresp.ttl = 120 s; # return (hit_for_pass); # } # return (deliver); # } # # sub vcl_deliver { # return (deliver); # } # # sub vcl_error { # set obj.http.Content-Type = "text/html; charset=utf-8"; # set obj.http.Retry-After = "5"; # synthetic {" # # # # #"} + obj.status + " " + obj.response + {" # # #Error "} + obj.status + " " + obj.response + {"
#"} + obj.response + {"
#Guru Meditation:
#XID: "} + req.xid + {"
#
#Varnish cache server
# # # "}; # return (deliver); # } # # sub vcl_init { # return (ok); # } # # sub vcl_fini { # return (ok); # }
用RAM缓存图片。。。好奢侈
如果硬盘的IO跟不上并发,短时间内只能切到内存里比较实际了