HAProxy+Varnish动静分离部署WordPress
来源:互联网 发布:数据站点应当互不相同 编辑:程序博客网 时间:2024/05/18 23:16
简介
HAProxy也是一种反向代理和负载均衡软件。工作在七层,也可以进行四层调度。这一点很类似于Nginx。
Varnish是缓存服务器,主要是缓存静态内容,比如css,js,图片等。特别是图片信息,特别占用网络带宽,并且一般情况下,图片是不会被修改的,修改的只是请求的图片名称而已。因此最好是将一个网站进行“动静分离”,动静分离,是要求网站的动态内容和静态内容分离的,这里就使用两份完全相同的WordPress分别放在动态和静态服务器上。
实验目的
1、动静分离部署wordpress,动静都要能实现负载均衡,要注意会话的问题;
2、在haproxy和后端主机之间添加varnish进行缓存;
3、HAProxy进行反向代理,并要完成以下功能
(1) stats page,要求仅能通过本地访问使用管理接口;
(2) 动静分离;
(3) 分别考虑不同的服务器组的调度算法;
(4) 压缩合适的内容类型;
实验拓扑
实验环境
使用centos7.3
HAproxy ip:192.168.18.97
varnish ip 192.168.18.98
static server ip :192.168.18.99
Dynamic server ip :192.168.18.100
mysql+nfs ip :192.168.18.103
实验步骤
一、部署web静态端服务
yum -y install httpdecho " web Server PAGE" > /var/www/html/index.htmlsystemctl start httpdsystemctl enable httpd
二、部署动态端服务
yum install httpd php php-mysql php-mbstring php-mcryptvim /var/www/html/index.php Dynamic Server <?php phpinfo();?>
三、配置NFS+mariadb
1、配置NFS
[root@centos7 ~]#yum -y install nfs -server nfs-utils mariadb-server[root@centos7 ~]#systemctl start nfs-server.service[root@centos7 ~]#vim /etc/exports //编辑nfs配置文件/app/blog 192.168.18.0/24(rw,all_squash,anonuid=48,anongid=48)
2、配置mariadb
[root@centos7 ~]#yum -y install mariadb-server[root@centos7 ~]#systemctl start mariadb.service[root@centos7 ~]#mysql_secure_installation //进行mysql安全设置[root@centos7 ~]#mysql -uroot -p123456 //以mysql的root身份登入。MariaDB [(none)]> create database blogdb; //创建WordPress数据库MariaDB [(none)]> grant all on blogdb.* to wpuser@'192.168.18.%' identified by '123456'; //创建WordPress用户和密码 下载WordPress并解压到、/app/blog下[root@centos7 ~]#useradd -u 48 -r -s /sbin/nologin apache[root@centos7 ~]#chown -R apache.apache /app/blog/[root@centos7 ~]#cp /app/blog/wp-config-sample.php /app/blog/wp-config.php[root@centos7 ~]#vim wp-config.php //直接对配置文件修改,/** WordPress数据库的名称 */define('DB_NAME', 'blogdb');/** MySQL数据库用户名 */define('DB_USER', 'wpuser');/** MySQL数据库密码 */define('DB_PASSWORD', '123456');/** MySQL主机 */define('DB_HOST', '192.168.18.103');
3、挂载
[root@centos7 ~]#vim /etc/fstab //写进配置文件。可以以后开机自动挂载。192.168.18.103:/app/blog /var/www/html/blog nfs defaults 0 0 //在最后添加这条记录[root@centos7 ~]#mkdir /var/www/html/blog -pv //没有此目录创建此目录。[root@centos7 ~]#mount -a //对/etc/fstab 新增内容挂载
4、测试
三、配置安装 HAProxy
yum -y install haproxyvim /etc/haproxy.cfgfrontend main # 监听在80端口 bind *:80 # 增加自定义头部 rspadd X-Via:\ HAProxy-1 # 删除头部 rspidel Server.* # ACL规则 acl static path_end -i .html .css .js acl static path_end -i .jpg .jpeg .gif .png acl static path_beg -i /images /static # 如果满足定义的static ACL规则,则调度至此后端 use_backend websrvs if static # 默认后端 default_backend appsrvslisten status # 管理页面监听端口 bind *:9009 # ACL规则 acl auth_admin src 192.168.18.1 # 开启状态页 stats enable # 状态页URI stats uri /myhaproxy?status # 状态页提示信息 stats realm HAProxy\ Admin\ Area # 认证用户:密码 stats auth admin:admin # 如果满足 auth_admin条件则允许访问状态页 stats admin if auth_adminbackend websrvs # 添加头部,日志中可以使用 option forwardfor header X-Client # 负载均衡调度算法为 URI balance uri # 后端服务器,健康检查、权重、自定义cookie server web1 192.168.18.98:80 check cookie web1 # 一致性HASH hash-type consistentbackend appsrvs option forwardfor header X-Client balance uri #balance roundrobin server app1 192.168.18.99:80 cookie app1 check hash-type consistent
四、配置varnish
1、安装varnish
yum -y install varnishcp /etc/varnish/varnish.params{,.bak}
2、直接查看配置文件吧
vim /etc/varnish/varnish.paramsvcl 4.0;import directors; # 导入负载均衡模块# Default backend definition. Set this to point to your content server.probe healthchk { # 配置健康状态检查 .url = "/.healthchk.html"; # 检查状态检查的URL .timeout = 2s; # 超时时间 .interval = 2s;# 每2秒检查一次 .window = 8; # 一共检查的次数 .threshold = 5; # 如果大于4次则为健康}backend appsrv1 { # 配置后端主机 .host = "192.168.18.100"; .port = "80"; .probe = healthchk;}backend websrv1 { # 配置后端主机 .host = "192.168.18.99"; .port = "80"; .probe = healthchk;}acl purgers { # 定义裁剪的ACL "127.0.0.0"/8; "192.168.18.131"/32;}acl baner { "127.0.0.1"/8;}sub vcl_init { # 初始化负载均衡 new websrvs = directors.round_robin(); websrvs.add_backend(websrv1);}sub vcl_recv { # 定义接收段 # 如果请求的URL中包括以下信息,则调度至我们的后端主机 if (req.url ~ "(?i)\.(jpg|jpeg|png|gif|svg|txt|html|css|js)$") { set req.backend_hint = websrvs.backend(); }else { set req.backend_hint = appsrv1; } ## 如果请求方法是PURGE,也就是裁剪缓存 if (req.method == "PURGE") {# 如果客户端IP不在我们之前定义的ACL for purges中,提示如下信息 if (!client.ip ~ purgers) { return(synth(405,"Purging not allowed for " + client.ip)); } return(purge); # 反之,执行裁剪缓存 } if (req.method == "BAN") { if (!client.ip ~ baner) { return(synth(405,"baning not allowed for " + client.ip)); } ban("req.http.host == " + req.http.host + " && req.url == " + req.url); return (synth(200,"Ban added")); } if (req.method == "PURGE") { return(purge); } # 自定义头部 if (req.restarts == 0) { if (req.http.X-Fowarded-For) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + "," + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } }# 如果相应的状态码不是200或者404,则不缓存 if ( beresp.status != 200 && beresp.status != 404 ) { set beresp.uncacheable = true; set beresp.ttl = 120s; return (deliver); }# 设置默认ttl缓存为 1小时 set beresp.ttl = 1h;}sub vcl_purge { # 定义裁剪缓存的提示信息 return (synth(200,"Purged."));}sub vcl_deliver {# 如果命中了则返回自定义头部,未命中则返回另一个自定义头部 if (obj.hits > 0) { set resp.http.X-Cache = " Hit via " + server.ip; } else { set resp.http.X-Cache = " Miss via " + server.ip; }}
3、编译配置文件并使用
如果默认端口没有改变,则可以直接使用下面命令
(1)#varnishadm
(2)编译/etc/varnish/default.vcl vcl.load test1 default.vcl
(3)指定使用哪个编译结果 vcl.use test1
到这里就配置完成了:
4、测试
发现来自于192.168.18.98,这时就算使用varnish成功了。
如果你发现写的不对,请多多交流^_^
- HAProxy+Varnish动静分离部署WordPress
- HAproxy+varnish动静分离部署wordpress
- HAproxy+varnish动静分离部署wordpress
- keepalived高可用haproxy配合varnish实现wordpress的动静分离
- Haproxy负载均衡/动静分离
- centos使用varnish实现网站动静分离
- Nginx 代理 varnish 实现动静分离
- haproxy实现负载均衡和动静分离
- HAproxy指南之haproxy实现动静分离(案例篇)
- HAProxy + apache 负载均衡,动静分离,读写分离
- 基于centos6.5使用varnish实现网站动静分离
- 使用HAproxy如何实现web站点的动静分离
- haproxy+nginx+tomcat+memcache实现动静分离、会话同步集群
- 使用HAproxy如何实现web站点的动静分离
- 动静分离
- 动静分离
- Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载
- Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载
- 【vue】webpack打包vue项目并且运行在Tomcat里面
- PAT乙级1013. 数素数 (20) 判断素数代码
- F
- 【DP?】买卖股票
- javascript的原型与原型链
- HAProxy+Varnish动静分离部署WordPress
- SSM框架搭建思路及流程
- 网络配置工具
- js对象
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing
- 使用wait和notify来实现生产者和消费者
- Java的隐秘之JavaCC
- 使用Lock和Condition实现生产者和消费者
- HTTP请求错误400、401、402、403、404、405、406、407、412、414、500、501、502解析