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

Varnish安装配置过程记录

Varnish是一个开源的反向代理软件和HTTP加速器,与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点,很多大型的运营网站都开始尝试用Varnish来替换Squid,这些都促使Varnish迅速发展起来。1、准备工作及下载源码包yuminstall-yau

   Varnish是一个开源的反向代理软件和HTTP加速器,与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点,很多大型的运营网站都开始尝试用Varnish来替换Squid,这些都促使Varnish迅速发展起来。

  1、准备工作及下载源码包

  yum install -y automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

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

  2、安装

  tar zxf varnish-3.0.3.tar.gz

  cd varnish-3.0.3

  ./autogen.sh

  ./configure --prefix=/usr/local/varnish

  make && make install

  3、添加Varnishd进程用户www,用户组www,创建/var/vcache目录,使www用户有权限可读写

  groupadd www

  useradd www -g www

  mkdir /home/vcache

  chown -R www:www /home/vcache

  chmod -R 750 /home/vcache

  4、编辑/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 重新按配置文件设置内核参数

  5、启动Varnishd

  /usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/home/vcache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0.0.1:3500

  参数说明:

  -u 以什么用运行

  -g 以什么组运行

  -f varnish配置文件

  -a 绑定IP和端口

  -s varnish缓存文件位置与大小

  -w 最小,最大线程和超时时间

  -T varnish管理端口,主要用来清除缓存

  -p client_http11=on 支持http1.1协议

  -P(大P) /usr/local/varnish/var/varnish.pid 指定其进程码文件的位置,实现管理

  6、启动varnishncsa用来将Varnish访问日志写入日志文件:

  /usr/local/varnish/bin/varnishncsa -n /home/vcache -w /var/log/varnish.log &

  7、Varnish 缓存清除

  /usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 purge "req.http.host ~ www.5013.org$ && req.url ~ /static/image/tp.php"

  说明:

  192.168.1.180:3000 为被清除缓存服务器地址

  www.5013.org 为被清除的域名

  /static/image/tp.php 为被清除的url地址列表

  清除所有缓存

  /usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 url.purge *$

  清除image目录下所有缓存

  /usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 url.purge /image/

  8、将加入启动项

  vi /etc/rc.local

  ulimit -SHn 51200

  /usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/home/vcache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0.0.1:3500

  /usr/local/varnish/bin/varnishncsa -n /home/vcache -w /var/log/varnish.log &

  9、杀掉varnishd进程

  pkill varnishd

  10、查看varnishd命中率

  /usr/local/varnish/bin/varnishstat

  11、更新系统时间

  yum install -y ntp

  ntpdate time.nist.gov

  echo "00 01 * * * ntpdate time.nist.gov" 》 /etc/crontab

  附件多主机多域名varnish.conf 配置

  backend blog {

  .host = "198.56.193.190";

  .port = "80";

  }

  backend www {

  .host = "192.168.1.170";

  .port = "80";

  }

  sub vcl_recv {

  if (req.http.host ~ "^(www.)?5013.org$") {

  set req.backend = blog;

  } elsif (req.http.host ~ "^(www.)?(test1.com|test2.com)$") {

  set req.backend = www;

  } else {

  error 404 "Unknown virtual host";

  }

  }

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

  }

 #只有GET与HEAD方法才会使用Lookup,使用缓存。
    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);
    # }
    #如果请求的是php页面直接转发到后端服务器
    if (req.url ~ ".(php|cgi)($|?)") {
    return (pass);
    }
    return (lookup);
    }
    sub vcl_pipe {
    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);
    }
    if (req.url ~ ".(png|gif|jpg)$") {
    unset beresp.http.set-COOKIE;
    set beresp.ttl = 1h;
    }
    #设置图片的缓存TTL为一小时
    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 {"
   
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   
   
   
   
   
    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);
    }


推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
author-avatar
林佳煌8888
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有