lamp架构(17)-CDN内容分发网络、varnish配置

本文详细介绍CDN内容分发网络的搭建过程,包括Varnish的安装与配置、实现负载均衡及健康检测的方法,同时讲解如何确保原站能够获取客户端原始IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. CDN内容分发网络

两大功能: 1、缓解后端原始服务器的压力 2、提速 整体框图:

在这里插入图片描述

1.相关组件安装

Varnish是一款高性能的开源HTTP加速器

选择在server4上配置vanish:

[root@server4 ~]# ls
varnish  (官网下载)
[root@server4 ~]# cd varnish/
[root@server4 varnish]# ls
bansys.zip                             varnish-4.0.5-1.el7.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm        varnish-6.4.0-1.el7.x86_64.rpm
jemalloc-devel-3.6.0-1.el7.x86_64.rpm  varnish-libs-3.0.4-1.el6.x86_64.rpm
rhel6 varnish.pdf                      varnish-libs-3.0.5-1.el6.x86_64.rpm
varnish-3.0.4-1.el6.x86_64.rpm         varnish-libs-4.0.5-1.el7.x86_64.rpm
varnish-3.0.5-1.el6.x86_64.rpm         Varnish权威指南-中文版.pdf
[root@server4 varnish]# yum install -y varnish-libs-4.0.5-1.el7.x86_64.rpm varnish-4.0.5-1.el7.x86_64.rpm jemalloc-3.6.0-1.el7.x86_64.rpm jemalloc-devel-3.6.0-1.el7.x86_64.rpm

在这里插入图片描述在这里插入图片描述

2.相关部署

2.1.添加默认后端服务器

指定server5(安装http)为服务端

[root@server4 varnish]#  vim /etc/varnish/defaul.vcl
 16 backend default {
 17     .host = "172.25.6.5";
 18     .port = "80";
 19 }

在这里插入图片描述

指定varnish服务的开启端口80

指定varnish服务的开启端口80
 [root@server4 varnish]# vim   /etc/varnish/varnish.params
   14 VARNISH_LISTEN_PORT=80
[root@server4 varnish]# systemctl start varnish 开启varnish服务

在这里插入图片描述此时使用curl 172.25.6.4可以看到http的测试页面,实际上访问的是server5的http:

[root@server4 varnish]# curl 172.25.6.4 -I #测试

在这里插入图片描述

2.2.为响应添加X-Cache首部,显示缓存是否命中

[root@server4 varnish]# vim /etc/varnish/defaul.vcl
 57 if (obj.hits > 0) {
 58         set resp.http.X-Cache = "HIT from westos cache";
 59         }
 60         else {
 61         set resp.http.X-Cache = "MISS from westos cache";
 62         }
 63         return (deliver);
 64 }

在这里插入图片描述

此时使用curl 172.25.6.4可以看到首次访问显示未击中缓存,再次访问显示击中缓存

2.3添加后端

2.3.1 apache模式

在server4中varnis修改配置文件,添加新后端:ip=172.25.6.6

[root@server4 varnish]# vim /etc/varnish/defaul.vcl
 32 elseif (req.http.host ~ "^ ") {
 33                       set req.backend_hint = web2; #如果访问的域名是bbs.westos.org则分发到server6上
 34                       return(pass);
 35      }
 36 else {
 37                       return(synth(404,"Not in cache")); 
#访问其它域名则报404错误}
[root@server4 varnish]# systemctl reload varnish.service

在这里插入图片描述在这里插入图片描述在测试端:foundation6添加解析,并在server5,server6添加发布页

[root@server4 ~]# vim /etc/hosts
172.25.6.4 server4 bbs.westos.org www.westos.org 
[root@server5 ~]# vim /var/www/html/index.html
内容: www.westos.org
[root@server6 ~]# vim /var/www/html/index.html
内容: bbs.westos.org

分别访问bbs.westos.org ,www.westos.org ,curl 172.25.6.4在foundation6测试
在这里插入图片描述

2.3.2.在server7上源码编译nginx,以实现负载均衡
2.3.2.1下载安装相应组件
[root@server7 ~]# tar zxf  nginx-1.20.1.tar.gz(官网下载)

[root@server7 ~]# ls
lamp  nginx-1.20.1  nginx-1.20.1.tar.gz
[root@server7 ~]# cd nginx-1.20.1
[root@server7 nginx-1.20.1]# ls  #源码安装时解压目录中的初始文件
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README

在这里插入图片描述

2.3.2.2.nginx的源码编译与安装
[root@server7 nginx-1.20.1]#  vim auto/cc/gcc   #注释掉debug选项,可以使安装最小化

在这里插入图片描述

[root@server7 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module src   #编译指令,编译参数可自由选择 

[root@server7 nginx-1.20.1]# yum install gcc -y                ##编译需要c语言包
[root@server7 nginx-1.20.1]# yum install pcre-devel -y     ##http重写功能需要的包
[root@server7 nginx-1.20.1]# yum install -y openssl-devel   ##ssl功能需要的包

在这里插入图片描述

[root@server7 nginx-1.20.1]#  make && make install      ##安装

在这里插入图片描述在这里插入图片描述

2.3.2.3添加环境变量并开启服务
[root@server7 sbin]# pwd
/usr/local/nginx/sbin
[root@server1 ~]# vim .bash_profile      ##注意路径(/root/下)
内容:PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin
[root@server1 ~]# source .bash_profile   ##使上述更改生效
[root@server7 ~]# echo $PATH             ##测试
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/nginx/sbin

在这里插入图片描述

[root@server7 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server7 ~]# nginx 
[root@server7 ~]# netstat -antlp        ##测试
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9831/nginx: master  

在这里插入图片描述

2.3.2.4配置调度服务器,添加虚拟主机
[root@server7 nginx]# cd conf/
[root@server7 conf]# ls
fastcgi.conf            koi-utf             nginx.conf           uwsgi_params
fastcgi.conf.default    koi-win             nginx.conf.default   uwsgi_params.default
fastcgi_params          mime.types          scgi_params          win-utf
fastcgi_params.default  mime.types.default  scgi_params.default
[root@server7 conf]# vim nginx.conf
 17 http {
 18       upstream westos{
 19       server 172.25.6.5:80;
 20       server 172.25.6.6:80;
 21       }
 22     include       mime.types;
 23     default_type  application/octet-stream;

120 server {
121         listen  80;
122         server_name www.westos.org;
123 
124         location / {
125                 proxy_pass http://westos;
126         }
127 }
[root@server7 conf]# nginx -s reload

在这里插入图片描述
在这里插入图片描述

2.3.3. server4 分发后端主机,实现负载均衡

此时server5和server6都有www.westos.org这个域名对应的虚拟主机,我们可以在server1 varnish配置文件中设置负载均衡

 [root@server4 varnish]# vim default.vcl
sub vcl_init {
        new web_cluster = directors.round_robin();
        web_cluster.add_backend(web3);
        web_cluster.add_backend(web1);
}
if (req.http.host ~ "^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend_hint = web_cluster.backend();
                return(pass);         不从缓存中找,直接去后端查询,刚开始访问有缓存,无法负载均衡,设置完这个参数之后就可以负载均
 [root@server4 varnish]# systemctl reload varnish

修改server5和server6的http默认发布页面,以实现区分效果

[root@server5 ~]# vim /var/www/html/index.html
内容: www.westos.org-server5
[root@server6 ~]# vim /var/www/html/index.html
内容: www.westos.org-server6

在foundation6直接访问www.westos.org,查看效果

[root@foundation6 ~]# curl www.westos.org
www.westos.org-server5
[root@foundation6 ~]# curl www.westos.org
www.westos.org-server6

在这里插入图片描述

2.3.4健康检测

当后端(nginx,apache)出现问题时,为了不让用户访问报错,我们需要做后端的健康检查

[root@server1 varnish]# vim default.vcl 
probe backend_healthcheck {
    .url = "/index.html";
    .window = 3;
    .threshold = 2;
    .interval = 3s;  ##每隔三秒执行一次健康检测
}
[root@server1 varnish]# systemctl reload varnish.service

3.原站获取客户端原始ip

在生产环境中有时候会有这样的需求:原站可能需要根据访问量等信息做业务分析,这时候就需要获取到客户端原始的ip,但是正常情况下客户访问到原站会经过两次反向代理->cdn 和proxy,这时候如果不做某些设置,则原站获取到的都是cdn的ip,无法满足业务需求

nginx代理配置修改server7上nginx的配置文件

[root@server7 nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@server7 nginx]#   vim  conf/nginx.conf
 17 http {
 18       upstream westos{
 19     # server 172.25.6.5:80;   ##的注释掉调度器的server5
 20       server 172.25.6.6:80;
 21       }
 server {
121         listen  80;
122         server_name www.westos.org;
123 
124         location / {
125                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
126                 proxy_pass http://westos;
127         }
128 }
129  }
[root@server7 nginx]# nginx -s reload 

nginx服务器配置修改server6上nginx的配置文件(关闭httpd,并参照server7进行nginx的源码编译)


[root@server6 nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@server6 nginx]# vim  conf/nginx.conf	
 43         location / {
 44             root   html;
 45             index  index.html index.htm;
 46             real_ip_header    X-Forwarded-For; ##是指从接收到报文的哪个http首部去获取前代理传送的用户ip
 47          #   real_ip_recursive on;              ##是否递归地排除直至得到用户ip(默认为off)
 48             set_real_ip_from 172.25.6.7;
 49         }
[root@server6 nginx]# nginx -s reload 

此时在foundation6上访问curl www.westos.org.会出现原始nginx测试页面,可以查看server6的nginx日志以发现原始的客户端ip=172.25.6.250

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值