HAproxy的安装配置及网页的动静分离

本文介绍了HAProxy的安装步骤及配置方法,包括基于不同算法的负载均衡实践、网页动静分离、重定向等功能,并详细展示了如何通过HAProxy实现读写分离和图片上传下载等高级应用场景。

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

HAProxy简介

(1)HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

(3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。


1.安装haproxy软件包

[root@server1 ~]# yum install -y gcc
[root@server1 ~]# yum install -y rpm-build
[root@server1 ~]# yum install -y pcre-devel
[root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz  #解压并编译为二进制
[root@server1 ~]# cd rpmbuild/RPMS/
[root@server1 RPMS]# cd x86_64/
[root@server1 x86_64]# rpm -qpl haproxy-1.6.11-1.x86_64.rpm 
[root@server1 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm   #忽略依赖性
[root@server1 x86_64]# cd
[root@server1 ~]# tar zxf haproxy-1.6.11.tar.gz   #解压
[root@server1 ~]# cd haproxy-1.6.11
[root@server1 haproxy-1.6.11]# cd examples/
[root@server1 examples]# cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
[root@server1 examples]# cd /etc/haproxy/
[root@server1 haproxy]# ls
[root@server1 haproxy]# vim /etc/init.d/haproxy   #查看脚本

2.配置haproxy

[root@server1 haproxy]# groupadd -g 200 haproxy   
[root@server1 haproxy]# useradd -u 200 -g 200 -M haproxy   #建立haproxy用户
[root@server1 haproxy]# id haproxy
uid=200(haproxy) gid=200(haproxy) groups=200(haproxy)
[root@server1 haproxy]# vim /etc/security/limits.conf    #限制文件

这里写图片描述

[root@server1 haproxy]# vim haproxy.cfg

这里写图片描述
这里写图片描述

3.测试

打开服务:
【server1】
[root@server1 haproxy]# /etc/init.d/haproxy  start
【server2】【server3】打开httpd服务

这里写图片描述
这里写图片描述
【健康检查】
这里写图片描述
【监控】
这里写图片描述

调度算法

1.roundrobin : 基于权重轮循。
2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效
3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
4.leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境)
5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
7.hdr() : 根据http头转发,如果不存在http头。则使用简单轮循。

[root@server1 haproxy]# vim /etc/rsyslog.conf 

这里写图片描述
这里写图片描述

[root@server1 haproxy]# /etc/init.d/rsyslog restart
[root@server1 haproxy]# vim haproxy.cfg

这里写图片描述

测试:

这里写图片描述
不进行轮询,只能访问到server2,这是算法的作用


网页动静分离

[server3]主机

[root@server3 ~]# yum install -y php
[root@server3 ~]# cd /var/www/html
[root@server3 html]# vim index.php
[root@server3 html]# /etc/init.d/httpd restart

这里写图片描述
[server1]主机

[root@server1 ~]# cd /etc/haproxy
[root@server1 haproxy]# vim haproxy.cfg 
[root@server1 haproxy]# /etc/init.d/haproxy reload

这里写图片描述
这里写图片描述
在网页访问http://172.25.40.1/index.php
这里写图片描述
在网页访问http://172.25.40.1/index.html
这里写图片描述

网站访问都是server1主机IP
访问index.html就会转到server2主机的解析上,访问以.php结尾的网站自动转接到server3主机上的解析。


重定向:

[root@server1 haproxy]# yum install -y httpd
[root@server1 haproxy]# vim /etc/httpd/conf/httpd.conf #更改端口为8080

这里写图片描述

[root@server1 haproxy]# cd /var/www/html
[root@server1 html]# vim index.html
[root@server1 html]# /etc/init.d/httpd restart

这里写图片描述

[root@server1 ~]# cd /etc/haproxy
[root@server1 haproxy]# vim haproxy.cfg 
[root@server1 haproxy]# /etc/init.d/haproxy reload

这里写图片描述
访问http://172.25.40.1:8080/
这里写图片描述
测试:
这里写图片描述

网页重定向:

[root@server1 haproxy]# vim haproxy.cfg 
[root@server1 haproxy]# /etc/init.d/haproxy reload

这里写图片描述
测试:
1.可以直接在网页上访问172.25.40.1就可以直接跳转到www.baidu.com
2.这里写图片描述


读写分离:

图片上传:

[root@server2 ~]# cd /var/www/html
[root@server2 html]# mkdir images
由主机传进一个图片
[root@foundation40 Desktop]# scp redhat.jpg root@172.25.40.2:/var/www/html/images

访问http://172.25.40.1/images/redhat.jpg
这里写图片描述
当访问server1时,可以看到server2主机的images下的图片

图片下载:

[root@server1 haproxy]# vim haproxy.cfg 
[root@server1 haproxy]# /etc/init.d/haproxy reload

这里写图片描述

[root@foundation40 Desktop]# scp  -r upload root@172.25.40.3:/var/www/html
[root@foundation40 Desktop]# scp  -r upload root@172.25.40.2:/var/www/html

在【server2】和【server3】里做以下相同的配置

[root@server3 ~]# cd /var/www/html
[root@server3 html]# ls
[root@server3 html]# cd upload/
[root@server3 upload]# ls
[root@server3 upload]# mv * ..
[root@server3 upload]# cd ..
[root@server3 html]# ls
[root@server3 html]# chmod 777 upload
[root@server3 html]# ll

这里写图片描述
【server2】主机

[root@server2 html]# yum install -y php
[root@server2 html]# vim upload_file.php 
[root@server2 html]# /etc/init.d/httpd restart

这里写图片描述
访问http://172.25.40.2/
这里写图片描述
这里写图片描述
测试:
这里写图片描述
在server2主机上下载,存储在server3主机中

<think>好的,用户想了解动静分离的原因及好处,以及它在IT架构和网站性能优化中的意义和优势。首先,我需要回顾一下动静分离的基本概念,然后结合提供的引用资料来分析。 首先,动静分离指的是将静态资源(如HTML、CSS、JavaScript、图片等)和动态内容(如PHP、JSP生成的页面)分开处理。根据引用[1],静态网页没有后台数据库,不含程序,所以加载速度快,而动态网页需要服务器处理,速度较慢。因此,分离它们可以提高效率。 接下来,用户可能想知道为什么要分开处理。静态资源通常不变,适合缓存和CDN加速,而动态内容需要实时生成,消耗服务器资源。分开后,静态资源可以用专门的服务器(如Nginx)处理,减轻应用服务器的负担。引用[3]提到MySQL主从分离和读写分离来提升性能,类似的思路可以应用到动静分离上,优化资源分配。 然后,优势方面,提升性能是关键。静态资源独立部署后,加载更快,用户体验更好。同时,高可用性方面,静态服务器可以更容易扩展,使用CDN还能提高可用性。安全性方面,分离后动态服务器的攻击面减少,提升整体安全。运维管理也更方便,可以针对不同资源进行优化。 需要结合引用中的例子,比如引用[2]提到数据持久层使用MySQL主从分离,读写分离,这和动静分离都是架构优化的手段,目的是分散压力,提高性能。用户的问题可能涉及网站性能优化的具体策略,所以需要强调动静分离在此过程中的作用。 最后,生成相关问题时要围绕动静分离的原因、实现方式、技术选型、与其他优化策略的关系,以及实际应用案例。确保问题能帮助用户深入理解该概念。</think>### 动静分离的意义与优势 #### 1. **定义与背景** 动静分离指将网站的静态资源(如HTML、CSS、图片、JavaScript文件)与动态内容(如PHP、JSP生成的页面、API接口)分开处理。静态资源通常无需频繁变更,而动态内容依赖服务器实时生成[^1]。 #### 2. **核心原因** - **性能瓶颈**:动态内容需服务器计算和数据库交互,响应时间较长;静态资源可直接从磁盘或缓存加载,响应更快[^3]。 - **资源优化**:动态请求占用服务器CPU和内存,而静态资源可通过专用服务器(如Nginx)高效处理,降低主服务器负载[^2]。 - **扩展性**:静态资源易于通过CDN分发或对象存储横向扩展,动态服务则需通过集群或微服务架构提升性能。 #### 3. **核心优势** - **提升访问速度**:静态资源通过浏览器缓存、CDN加速,减少延迟。例如,用户请求图片时直接从边缘节点获取,无需经过应用服务器。 - **增强稳定性**:动态服务与静态资源隔离后,单一模块故障不影响全局。例如,静态服务器宕机时,动态服务仍可运行(反之亦然)[^3]。 - **降低成本**:静态资源可通过低成本对象存储或CDN托管,动态服务则可集中资源优化计算能力。 - **安全加固**:分离后,动态服务的攻击面(如SQL注入)更易监控,静态服务器可配置严格权限策略。 #### 4. **技术实现示例** ```nginx # Nginx配置示例:静态资源路由 server { listen 80; server_name example.com; location /static/ { alias /var/www/static/; expires 30d; # 缓存30天 } location / { proxy_pass http://backend_server; # 动态请求转发至应用服务器 } } ``` #### 5. **与其他架构优化的协同** 动静分离常与以下方案结合: - **数据库读写分离**:如引用[3]所述,MySQL主从分离提升读取性能,类似逻辑适用于动静分离。 - **负载均衡**:静态资源通过CDN负载均衡,动态服务通过反向代理(如HAProxy)分配流量[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值