文章目录
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