yiduzixin@163.com | 发布于 2018-04-05 07:02:20 | 阅读量 186 |
发布于 2018-04-05 07:02:20 |

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); 
} 
}​

 


内容更新于: 2018-12-06 16:08:49
链接地址: http://blog.leanote.com/post/yiduzixin@163.com/varnish

上一篇: pipenv install

下一篇: http无响应解决方案

186 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航