Varnish高性能HTTP加速服务器教程

2024-02-19 08:38

本文主要是介绍Varnish高性能HTTP加速服务器教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主机环境:
  • rhel6.5 selinux and iptables disabled
实验主机:
主机名IP服务
server1172.25.254.1varnish
server2172.25.254.2apache
server3172.25.254.3apache
Varnish工作原理图

这里写图片描述

VCL (Varnish Configuration Language)处理流程图

这里写图片描述

处理过程大致分为如下几个步骤:
  • Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或 Pipe,或者进入 Lookup(本地查询)。
  • Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
  • Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
  • Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
  • Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
设计思想:firefox -> hosts/dns -> varnish -> httpd
varnish–server1
  • 安装
    • http://varnish-cache.org/releases/install_redhat.html#install-redhat
[root@server1 ~]# yum install -y varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm 
  • 配置 varnish 服务端口
[root@server1 ~]# vim /etc/sysconfig/varnishVARNISH_LISTEN_PORT=80
  • 配置一个后端服务器
[root@server1 ~]# vim /etc/varnish/default.vcl
backend default {.host = "172.25.254.2";.port = "80";
}
  • 查看缓存命中情况
[root@server1 ~]# vim /etc/varnish/default.vcl
sub vcl_deliver {if (obj.hits > 0) {set resp.http.X-Cache = "HIT from test cache";}else {set resp.http.X-Cache = "MISS from test cache";}return (deliver);}
  • 开启服务
[root@server1 ~]# /etc/init.d/varnish start
apache–server2
  • 安装apache
[root@server2 ~]# yum install -y httpd
  • 编写前端文件
[root@server2 ~]# cat /var/www/html/index.html
<h1>Welcome to www.westos.org !!</h1>
  • 开启服务
[root@server2 ~]# /etc/init.d/httpd start
物理机测试
  • 添加解析
 [root@fundation20 Desktop]# cat /etc/hosts
172.25.254.1 server1 www.westos.org 
  • 测试
##未命中
[root@fundation20 Desktop]# curl -I www.westos.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Tue, 13 Feb 2018 00:46:57 GMT
ETag: "20331-26-5650d54eefd0e"
Content-Type: text/html; charset=UTF-8
Content-Length: 38
Accept-Ranges: bytes
Date: Tue, 13 Feb 2018 02:09:16 GMT
X-Varnish: 120543320
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from test cache
##命中
[root@fundation20 Desktop]# curl -I www.westos.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Tue, 13 Feb 2018 00:46:57 GMT
ETag: "20331-26-5650d54eefd0e"
Content-Type: text/html; charset=UTF-8
Content-Length: 38
Accept-Ranges: bytes
Date: Tue, 13 Feb 2018 02:09:18 GMT
X-Varnish: 120543321 120543320
Age: 2
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from test cache
通过 varnishadm 手动清除缓存
 [root@server1 ~]# varnishadm ban.url .*$           #清除所有[root@server1 ~]# varnishadm ban.url /index.html   #清除 index.html 页面缓存[root@server1 ~]# varnishadm ban.url /admin/$      #清除 admin 目录缓存

定义多个不同域名站点的后端服务器

  • varnish–server1
[root@server1 ~]# vim /etc/varnish/default.vcl
#配置两个后端服务器
backend web1 {.host = "172.25.254.2";.port = "80";
}
backend web2 {.host = "172.25.254.3";.port = "80";
}
#当访问 www.westos.org 或 westos.org 域名时从 web1 上取数据;
#访问 bbs.westos.org 域名时到 web2 取数据;
#访问其他,页面报错。sub vcl_recv {if (req.http.host ~ "^(www.)?westos.org") {set req.http.host = "www.westos.org";set req.backend = web1;} elsif (req.http.host ~ "^bbs.westos.org") {set req.backend = web2;} else {error 404 "westos cache";}}##重启服务[root@server1 ~]# /etc/init.d/varnish restartStopping Varnish Cache:                                    [  OK  ]Starting Varnish Cache:                                    [  OK  ]
  • apache–server2
 [root@server2 ~]# cat /var/www/html/index.html 
<h1>Welcome to www.westos.org from server2 !!</h1>[root@server2 ~]# /etc/init.d/httpd  restart
  • apache–server3
 [root@server3 ~]# yum install -y httpd[root@server3 ~]# cat /var/www/html/index.html
<h1>Welcome to bbs.westos.org from server3 !!</h2>[root@server3 ~]# /etc/init.d/httpd start
物理机测试
  • 添加解析
 [root@fundation20 Desktop]# cat /etc/hosts
172.25.254.1 server1 www.westos.org westos.org bbs.westos.org
  • 浏览器测试
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

负载均衡

  • varnish–server1
[root@server1 ~]# vim /etc/varnish/default.vcl
#配置两个后端服务器
backend web1 {.host = "172.25.254.2";.port = "80";
}
backend web2 {.host = "172.25.254.3";.port = "80";
}
##把两个后端聚合为一个组,并检测后端健康状况
director lb round-robin {{ .backend = web1; }{ .backend = web2; }
}
sub vcl_recv {if (req.http.host ~ "^(www.)?westos.org") {set req.http.host = "www.westos.org";set req.backend = lb;  return(pass);   ##为了测试方便,不进行缓存} elsif (req.http.host ~ "^bbs.westos.org") {set req.backend = web2;} else {error 404 "westos cache";}}[root@server1 ~]# /etc/init.d/varnish restart
Stopping Varnish Cache:                                    [  OK  ]
Starting Varnish Cache:                                    [  OK  ]
  • apache–server2
[root@server2 ~]# cat /var/www/html/index.html 
<h1>Welcome to www.westos.org from server2 !!</h1>[root@server2 ~]# /etc/init.d/httpd restart
  • apache–server3
#搭建虚拟主机,保留原/var/www/html/index.html
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf #打开虚拟主机服务
NameVirtualHost *:80   #去掉注释##添加到最后
<VirtualHost *:80>DocumentRoot  /var/www/htmlServerName    bbs.westos.org
</VirtualHost><VirtualHost *:80>DocumentRoot  /wwwServerName    www.westos.org
</VirtualHost>[root@server3 ~]# mkdir /www
[root@server3 ~]# vim /www/index.html
<h1>Welcome to www.westos.org from server3 !!</h1>[root@server3 ~]# /etc/init.d/httpd restart##添加本地解析
[root@server3 ~]# cat /etc/hosts
172.25.254.3 server3 www.westos.org bbs.westos.org ##测试虚拟机主机
[root@server3 ~]# curl www.westos.org
<h1>Welcome to www.westos.org from server3 !!</h1>
[root@server3 ~]# curl bbs.westos.org
<h1>Welcome to bbs.westos.org from server3 !!</h2>
物理机测试:
  • 查看解析
[root@fundation20 Desktop]# cat /etc/hosts
172.25.254.1 server1 www.westos.org westos.org bbs.westos.org
  • 浏览器测试
    这里写图片描述
    这里写图片描述
  • 终端测试
[root@fundation20 Desktop]# for i in {1..6}; do curl www.westos.org ;done
<h1>Welcome to www.westos.org from server2 !!</h1>
<h1>Welcome to www.westos.org from server3 !!</h1>
<h1>Welcome to www.westos.org from server2 !!</h1>
<h1>Welcome to www.westos.org from server3 !!</h1>
<h1>Welcome to www.westos.org from server2 !!</h1>
<h1>Welcome to www.westos.org from server3 !!</h1>

这篇关于Varnish高性能HTTP加速服务器教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724122

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示