#实用的安装方法见解
https://www.phodal.com/blog/centos-varinsh-4-install-compile/
#报错解决办法
http://www.cnblogs.com/vastiny/p/3675436.html#安装varnish 3.0.3 地址
http://www.zrwm.com/?p=4369
#中途遇到错误 解决办法文章
http://www.361way.com/varnish-install/2333.html
#安装varnish 4.0
http://www.cnblogs.com/xiaocen/p/3715266.html
#varnish 3.0 清除缓存。
/usr/local/server/varnish/bin/varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret ban.url ^.*$
#准备工作 安装pcre
wget -c http://downloads.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.bz2
tar jxvf pcre-8.32.tar.bz2
cd pcre-8.32
./configure && make && make install
#添加用户组:用户
groupadd varnish
useradd -g varnish -s /sbin/nologin varnish
#建立文件
mkdir -p /usr/local/server/varnish
#安装varnish的步骤。
1.下载软件。
wget -c http://repo.varnish-cache.org/source/varnish-3.0.3.tar.gz
tar zxvf varnish-3.0.3.tar.gz
cd varnish-3.0.3
#导入安装配置文件 pcre 如果没有下载 pcre安装 /usr/local/lib/pkgconfig 是默认安装地址。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure --prefix=/usr/local/server/varnish
make && make install
今天编译varnish 报错:
No package 'libpcre' found
开始以为没装pcre,于是下载安装后,继续,问题依旧。安装完prce-devel后。ldconfig 都不行。后来断定是没有安装pcre-devel的问题。Centos服务器上使用yum install pcre-devel安装
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
2.进行配置。
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish_reload_vcl /usr/local/server/varnish/bin/
2.1)配置启动项
vim /etc/sysconfig/varnish
#查找下面的参数修改。
a)VARNISH_VCL_CONF = /usr/local/server/varnish/etc/varnish/fdfs.vcl #varnish的配置文件,启动配置文件 内容规则 缓存规则存放的位置。
b)VARNISH_LISTEN_PORT = 80 #监听的端口 默认是80端口。web访问端口
c)VARNISH_ADMIN_LISTEN_ADDRESS = 127.0.0.1 #telnet管理的ip地址。
d)VARNISH_ADMIN_LISTEN_PORT = 6082 #telnet监听的端口地址。
e)VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin #文件缓存存放的地址
f)VARNISH_STORAGE_SIZE=2G #存放大小 内存或者文件。操过这个值 则会清除老的数据。
g) #两者只能2选1
VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" #文件缓存
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" #内存缓存
h) 启动项参数 调用上面的参数 使用默认就行了。
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
2.2)配置脚本管理
vim /etc/init.d/varnish
a)pidfile=/var/run/varnish.pid #启动生成ID
b)exec="/usr/local/server/varnish/sbin/varnishd" #启动时原文件
c)reload_exec="/usr/local/server/varnish/bin/varnish_reload_vcl" #启动加载配置文件
2.3)编辑vcl配置的脚本
vim /usr/local/server/varnish/bin/varnish_reload_vcl
a)VARNISHADM="/usr/local/server/varnish/bin/varnishadm $secret -T $VARNISH_ADMIN_LISTEN_ADDRESS:$VARNISH_ADMIN_LISTEN_PORT" #执行命令
2.4)生成varnish密钥。
/usr/bin/uuidgen > /usr/local/server/varnish/etc/varnish/secret
chmod 644 /usr/local/server/varnish/etc/varnish/secret
2.5)配置varnish前端示例。
vim /usr/local/server/varnish/etc/varnish/fdfs.vcl
3.命令操作。
3.1检查配置文件是否可用。
/etc/init.d/varnish configtest 或 /usr/local/server/varnish/sbin/varnishd -C -f /usr/local/server/varnish/etc/varnish/fdfs.vcl
3.2检查vanish的状态
/etc/init.d/varnish status
3.3 动态加载配置文件。不重启服务器。
/etc/init.d/varnish reload
3.4 启动、关闭varnish
/etc/init.d/varnish start|stop|restart
3.5 指定特定的缓存进行清除。
#-S /etc/varnish/secret 是根据特定的配置指定的 每个配置的secret存放的位置不同
/usr/local/server/varnish/bin/varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret ban.url ^.*$
/usr/local/server/varnish/bin/varnishadm -T 127.0.0.1:6082 -S /usr/local/server/varnish/etc/varnish/secret ban.url ^.*$
#附加配置前端demo
# 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 = "801";
}
#
# 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.http.host ~ "42.121.117.204" || req.http.host ~ "admin.yximg.com"){
return (pipe);
}
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 (lookup);
}
#if(req.http.host ~ "^(.*).yximg.com"){
# set req.backend = default;
#}
#
if(req.http.Accept-Encoding){
if(req.url ~ "\.(jpg|png|gif|gz|tgz)$"){
remove req.http.Accept-Encoding;
}else if(req.http.Accept-Encoding ~ "gzip"){
set req.http.Accept-Encodeing = "gzip";
}else if(req.http.Accept-Encoding ~ "deflate"){
set req.http.Accept-Encoding = "deflate";
}else{
remove req.http.Accept-Encoding;
}
}
if ((req.request=="GET" || req.request=="HEAD")&& req.url ~ "\.(png|gif|jpeg|swf|css|js|jpg|html)$"){
return (lookup);
}
if(req.url ~ "\.(html|htm)($|\?)"){
return (lookup);
#set beresp.ttl = 120s;
}
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 {
# set req.hash += req.url;=>hash_data(req.url);
hash_data(req.url);
if(req.http.Accept-Encoding ~ "gzip"){
#set req.hash += "gzip";
hash_data("gzip");
}else if(req.http.Accept-Encoding ~ "deflate"){
#set req.hash += "deflate";
hash_data("deflate");
}
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (hash);
}
#
#
#
sub vcl_hit {
#if (!obj.cacheable) {
# return (pass);
# }
if(req.request == "PURGE"){
set obj.ttl = 0s;
error 200 "purged";
}
return (deliver);
}
sub vcl_miss {
return (fetch);
}
#
sub vcl_fetch {
#if(beresp.http.Set-Cookie){
# return (hit_for_pass);
#}
#return error code[200];
if(beresp.status == 503 || beresp.status== 501 || beresp.status == 502 || beresp.status == 500 || beresp.status == 504 || beresp.status == 404){
return (restart);
}
#if(beresp.http.Pragma ~ "no-cache" || beresp.http.Cache-Control ~ "no-cache" || beresp.http.Cache-Control ~ "private"){
# return (hit_for_pass);
#}
if(req.request == "GET" && req.url ~ "\.(css|js|html|htm|com)$"){
set beresp.ttl = 300s;
}
if(req.http.host ~ "www.yximg.com" || req.http.host ~ "static.yximg.com"){
set beresp.ttl = 100s;
}else{
set beresp.ttl = 0s;
}
if(req.http.url ~ "/loaddata/.*"){
set beresp.ttl = 0s;
}
#set beresp.ttl = 120 s;
#return error(200);
#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);
# }
#
#
#
#acl purge{
# "localhost";
# "127.0.0.1";
#} }
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from www.epetbar.com";
} else {
set resp.http.X-Cache = "MISS from www.epetbar.com";
}
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);
}