varnish安装
yum install pcre-devel -y cd /home/ishangsoft/ wget http://down.i.my71.com/varnish-3.0.3.tar.gz tar -zxvf varnish-3.0.3.tar.gz cd varnish-3.0.3 ./configure --prefix=/usr/local/varnishd make && make install echo '/usr/local/varnishd/sbin/varnishd -f /usr/local/varnishd/etc/varnish/default.vcl -s malloc,4G -T 127.0.0.1:2000 -a 0.0.0.0:80' >> /etc/rc.local
配置文件:
cat /usr/local/varnishd/etc/varnish/default.vcl
# 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 = "81";
}
backend user {
.host = "10.30.48.103";
.port = "80";
}
backend file {
.host = "10.30.48.102";
.port = "80";
}
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.http.host == "user.xingning.gov.cn"){
set req.backend=user;
}else if(req.http.host == "file.xingning.gov.cn"){
set req.backend=file;
}else{
set req.backend=default;
}
}
#
# 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") {
return (pass);
}
if (req.request == "GET" && req.url ~ "/nocache/") {
return(pass);
}
if (req.http.Host == "user.xingning.gov.cn"){
return (pass);
}
if (req.http.Host == "file.xingning.gov.cn"){
return (pass);
}
if (req.http.Host == "m.xingning.gov.cn"){
return (pass);
}
#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 {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} + obj.status + " " + obj.response + {"</title>
</head>
<body>
<h1>Error "} + obj.status + " " + obj.response + {"</h1>
<p>"} + obj.response + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}
sub vcl_fetch {
set req.http.cookie = regsub(req.http.cookie, "(; )?PHPSESSID=[^;]+", "");
if (req.http.cookie == "") {
unset beresp.http.Pragma;
unset beresp.http.Expires;
unset beresp.http.set-cookie;
set beresp.ttl = 2h;
#time to live
set beresp.do_gzip = true;
set beresp.grace = 20m;
#grace time
remove req.http.Cookie;
return (deliver);
}
}
没有帐号? 立即注册