河南物流最新情况,重庆seo案例,南通中小企业网站制作,为农村建设网站报告一、工作原理
#xff08;1#xff09;包括
监听端口#xff1a;HAProxy 会在指定的端口上监听客户端的请求。 例如#xff0c;它可以监听常见的 HTTP 和 HTTPS 端口#xff0c;等待客户端连接。请求接收#xff1a;当客户端发起请求时#xff0c;HAProxy 接收到请求。…一、工作原理
1包括
监听端口HAProxy 会在指定的端口上监听客户端的请求。 例如它可以监听常见的 HTTP 和 HTTPS 端口等待客户端连接。请求接收当客户端发起请求时HAProxy 接收到请求。 它会解析请求的内容包括请求的方法如 GET、POST 等、目标 URL 等。负载均衡决策根据预先配置的负载均衡策略决定将请求转发到后端的哪个服务器。 常见的负载均衡算法有轮询、加权轮询、最少连接等。 比如轮询算法会依次将请求均匀地分配到后端的服务器加权轮询则会根据服务器的权重来分配请求。健康检查HAProxy 会持续监测后端服务器的健康状态。 通过发送特定的请求或者检测服务器的响应来判断服务器是否正常工作。 如果发现某台服务器不可用它会自动将请求转发到其他正常的服务器上。请求转发确定目标服务器后将客户端的请求转发给该服务器。响应处理后端服务器处理请求并返回响应给 HAProxy。响应返回HAProxy 再将后端服务器的响应返回给客户端。
2负载均衡
1、为什么使用负载均衡
Web服务器的动态水平扩展--对用户无感知增加业务并发访问及处理能力--解决单服务器瓶颈问题节约公网IP地址--降低IT支出成本隐藏内部服务器IP--提高内部服务器安全性配置简单--固定格式的配置文件功能丰富--支持四层和七层支持动态下线主机性能较强--并发数万甚至数十万
2、四层负载均衡
通过ipport决定负载均衡的去向。
对流量请求进行NAT处理转发至后台服务器。
记录tcp、udp流量分别是由哪台服务器处理后续该请求连接的流量都通过该服务器处理。
支持四层的软件
lvs重量级四层负载均衡器。Nginx轻量级四层负载均衡器可缓存。nginx四层是通过upstream模块Haproxy模拟四层转发。
3、七层负载均衡
通过虚拟ur|或主机ip进行流量识别根据应用层信息进行解析决定是否需要进行负载均衡。
代理后台服务器与客户端建立连接如nginx可代理前后端与前端客户端tcp连接与后端服务器建立 tcp连接。
支持7层代理的软件
Nginx:基于http协议(nginx七层是通过proxy_pass)Haproxy:七层代理会话保持、标记、路径转移等
4、区别
四层的负载均衡就是通过发布三层的IP地址VIP然后加四层的端口号来决定哪些流量需要做负载均衡对需要处理的流量进行NAT处理转发至后台服务器并记录下这个TCP或者UDP的流量是由哪台服务器处理的后续这个连接的所有流量都同样转发到同一台服务器处理。
七层的负载均衡就是在四层的基础上没有四层是绝对不可能有七层的再考虑应用层的特征比 如同一个Web服务器的负载均衡除了根据VIP加80端口辨别是否需要处理的流量还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。
分层位置:四层负载均衡在传输层及以下七层负载均衡在应用层及以下。性能 :四层负载均衡架构无需解析报文消息内容在网络吞吐量与处理能力上较高:七层可支持解析应用 层报文消息内容识别URL、Cookie、HTTP header等信息。原理 :四层负载均衡是基于ipport;七层是基于虚拟的URL或主机IP等。功能类比:四层负载均衡类似于路由器;七层类似于代理服务器。 5.安全性:四层负载均衡无法识别DDoS攻击;七层可防御SYN Cookie/Flood攻击。
二、定义
HAProxy是法国开发者威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 支持基于cookie的持久性自动故障切换支持正则表达式及web状态统计HAProxy 七层代理是指在 OSI 模型的第七层应用层进行代理操作。 在七层代理中HAProxy 不仅能够根据 IP 地址和端口进行流量分发还能够理解应用层协议如 HTTP、HTTPS 等的内容。 这意味着它可以基于诸如请求的 URL、HTTP 方法、HTTP 头部信息等更详细的应用层数据来做出决策和进行流量的分配。
三、实验
1、global---全局配置段
进程及安全配置相关的参数性能调整相关参数Debug参数 global log 127.0.0.1 local3 log 127.0.0.1 local1 notice #log loghost local0 info ulimit-n 82000 maxconn 20480 chroot /usr/local/haproxy uid 99 gid 99 daemon nbproc 1 pidfile /usr/local/haproxy/run/haproxy.pid #debug #quiet 解释一下
log全局的日志配置local0是日志输出设置info表示日志级别。maxconn设定每个haproxy进程可接受的最大并发连接数。chroot修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作。daemon让 haproxy 以后台模式运行不占用终端的输入输出。nbproc设置运行的进程数量。pidfile用于记录运行中的 haproxy 进程的 ID方便其他程序或脚本对其进行管理和监控。ulimit-n设定每进程所能够打开的最大文件描述符数目默认情况下其会自动进行计算因此不推荐修改此选项。
2、proxies---代理配置段
参数说明
defaults为frontend, backend, listen提供默认配置 frontend前端相当于nginx中的server {} backend后端相当于nginx中的upstream {} listen同时拥有前端和后端配置,配置简单,生产推荐使用
1defaults defaults log global mode http maxconn 50000 option httplog option httpclose option dontlognull option forwardfor retries 3 stats refresh 30 option abortonclose balance roundrobin #balance source #contimeout 5000 #clitimeout 50000 #srvtimeout 50000 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s 解释一下
defaults表示以下的配置是默认的全局配置。log global引入名为“global”定义的日志格式用于记录相关的日志信息。mode http指定所处理的类别为 7 层代理的 HTTP 模式。maxconn 50000设置最大的连接数量为 50000 个。option httplog表示日志的类别为 HTTP 日志格式用于记录 HTTP 相关的日志。option httpclose每次 HTTP 请求完毕后主动关闭 HTTP 通道释放资源。option dontlognull不记录健康检查的日志信息避免产生不必要的日志记录。option forwardfor如果后端服务器需要获取客户端的真实 IP 地址通过这个参数可以从 HTTP 头中获取。retries 3如果连接失败最多尝试重新连接 3 次超过 3 次则认为服务器不可用。stats refresh 30设置统计页面的刷新时间间隔为 30 秒。option abortonclose当服务器负载很高时自动结束当前队列中处理时间较长的连接以释放资源。 balance roundrobin设置默认的负载均衡方式为轮询方式即依次将请求分配到不同的服务器。 timeout http-request 10s默认的 HTTP 请求超时时间为 10 秒如果在 10 秒内未完成请求则视为超时。 timeout queue 1m默认的队列超时时间为 1 分钟。timeout connect 10s默认的连接超时时间为 10 秒。timeout client 1m默认的客户端超时时间为 1 分钟。timeout server 1m默认的服务器超时时间为 1 分钟。timeout http-keep-alive 10s默认的 HTTP 持久连接超时时间为 10 秒。timeout check 10s设置超时检查的超时时间为 10 秒。
2frontend frontend http_80_in bind 0.0.0.0:80 mode http log global option httplog option httpclose option forwardfor default_backend wwwpool 解释一下
frontend http_80_in定义一个名为http_80_in的frontend。bind 0.0.0.0:80表示将 HAProxy 服务绑定到所有可用的网络接口0.0.0.0的 80 端口上。这样客户端可以通过任何网络接口连接到这个端口来发送请求。mode http指定了工作模式为 HTTP 的 7 层模式。在这种模式下HAProxy 可以理解和处理 HTTP 协议的相关信息例如请求头、响应头。 log global应用全局的日志设置意味着使用在全局配置中定义的日志规则来记录与这个前端相关的操作和事件。option httplog启用了 HTTP 相关的日志记录以便更详细地记录 HTTP 请求和响应的信息。 option httpclose每次处理完请求后主动关闭 HTTP 通道。这是因为 HAProxy 不支持 HTTP 的 keep-alive 模式为了避免资源占用和潜在的问题选择在请求完成后关闭连接。option forwardfor如果后端服务器需要获取客户端的真实 IP 地址配置此参数可以从 HTTP 头中提取客户端的真实 IP 信息。default_backend wwwpool设置了默认情况下接收到的请求将被转发到名为 wwwpool 的后端服务池进行处理。 例如如果有多个客户端向 80 端口发送 HTTP 请求HAProxy 会根据上述配置来处理这些请求。如果后端服务器需要知道是哪个客户端发起的请求通过 option forwardfor 就能获取到真实的客户端 IP 地址。而所有没有特别指定后端的请求都会被默认转发到 wwwpool 这个后端服务池去处理。
3backend backend wwwpool mode http option redispatch option abortonclose balance source cookie SERVERID option httpchk GET /test.html server web1 10.1.1.2:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3 maxconn 8 解释一下
backend wwwpool定义了一个“wwwpool”的服务器组。mode http指定使用 HTTP 的 7 层模式进行负载均衡。这意味着不仅会考虑 IP 和端口还会分析 HTTP 请求的内容如 URL、请求头来做出负载均衡决策。option redispatch重分发选项通常用于在某些情况下重新分配请求到其他服务器。option abortonclose当连接关闭时采取特定的动作可能与处理异常关闭的连接相关。 *balance source表示使用源哈希算法进行负载均衡。这意味着根据客户端的源 IP 地址来决定将请求分配到哪个后端服务器相同源 IP 的请求通常会被发送到同一台服务器。cookie SERVERID允许在 cookie 中插入“SERVERID”。这有助于跟踪和识别与特定服务器的会话关联。option httpchk GET /test.htm心跳检测通过发送 GET 请求到“/test.html”路径来检查后端服务器的健康状况。server web1 10.1.1.2:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3 maxconn 8 - “server web1”定义了服务器的名称为“web1”。 - “10.1.1.2:80”是服务器的 IP 地址和端口。 - “cookie 2”可能表示与该服务器相关的特定 cookie 设置。 - “weight 3”为服务器设置权重为 3权重越大分配到的请求相对越多。 - “check inter 2000”表示检查的间隔为 2000 毫秒。 - “rise 2”表示服务器被认为正常的连续成功检查次数为 2 次。 - “fall 3”表示服务器被认为故障的连续失败检查次数为 3 次。 - “maxconn 8”表示该服务器的最大并发连接数为 8。
4listen listen admin_status #Frontend和Backend的组合体,监控组的名称按需自定义名称 bind 0.0.0.0:8888 #监听端口 mode http #http的7层模式 log 127.0.0.1 local3 err #错误日志记录 stats refresh 5s #每隔5秒自动刷新监控页面 stats uri /admin?stats #监控页面的url访问路径 stats realm itnihao\ welcome #监控页面的提示信息 stats auth admin:admin #监控页面的用户和密码admin,可以设置多个用户名 stats auth admin1:admin1 #监控页面的用户和密码admin1 stats hide-version #隐藏统计页面上的HAproxy版本信息 stats admin if TRUE #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本) 解释一下
listen admin_statusFrontend和Backend的组合体,监控组的名称。bind 0.0.0.0:8888指定监听的 IP 地址和端口。0.0.0.0表示监听所有可用的网络接口8888是端口号。mode http表示采用 HTTP 的七层模式进行处理。在这种模式下HAProxy 可以更深入地理解和处理 HTTP 协议的相关内容。log 127.0.0.1 local3 err指定将错误日志发送到 127.0.0.1 这个本地地址并使用 local3 这个日志设施记录错误级别的信息。stats refresh 5s设置监控页面每隔 5 秒钟自动刷新一次以提供实时的状态信息。stats uri /admin?stats定义了访问监控页面的 URL 路径为 /admin?stats 。stats realm itnihao\ welcome这是监控页面的提示信息可能在用户访问监控页面时显示。 stats auth admin:admin 和 stats auth admin1:admin1为监控页面设置了用户认证信息分别为 admin 用户对应密码 admin admin1 用户对应密码 admin1 。stats hide-version用于隐藏统计页面上的 HAProxy 版本信息可能是出于安全或其他考虑。 stats admin if TRUE用于手工启用或禁用后端服务器这是在 HAProxy 1.4.9 及以后版本可用的功能。如果设置为 TRUE 则表示启用相关的监控或管理操作。
3、haproxy负载均衡
环境
主机IP硬件配置haproxy172.25.254.100NAT网卡server1172.25.254.10NAT网卡serveer2172.25.254.20NAT网卡
haproxy配置如下
[roothaproxy ~]# dnf install haproxy -y
[roothaproxy ~]# rpm -qc haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg 修改内容如下 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend webcluster bind *:80 mode http use_backend webcluster-host backend webcluster-host balance roundrobin server web1 172.25.254.10:80 server web2 172.25.254.20:80 listen webcluster bind *:80 mode http balance roundrobin server web1 172.25.254.10:80 server web2 172.25.254.20:80 重启
[roothaproxy ~]# systemctl restart haproxy.service
测试
[roothaproxy ~]# for i in {1..10}docurl 172.25.254.100done
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20 日志重定向操作
[roothaproxy ~]# vim /etc/rsyslog.conf module(loadimudp) # needs to be done just once input(typeimudp port514) # Save boot messages also to boot.log local7.* /var/log/boot.log local2.* /var/log/haproxy.log 重启
[roothaproxy ~]# systemctl restart haproxy.service
server1配置
[rootserver1 ~]# dnf install nginx -y
[rootserver1 ~]# echo webserver1 - 172.25.254.10 /usr/share/nginx/html/index.html
[rootserver1 ~]# systemctl enable --now nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
server2配置
[rootserver2 ~]# dnf install -y nginx
[rootserver2 ~]# echo webserver2 - 172.25.254.20 /usr/share/nginx/html/index.html
[rootserver2 ~]# systemctl enable --now nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
4、haproxy热处理
1socat 定义对服务器动态权重和其它状态可以利用 socat 工具进行调整 Socat 是 Linux 下的一个多功能的网络工具名字来由是Socket CAT 相当于 netCAT 的增强版 .Socat 的主要特点就是在两个数据流之间建立双向通道且支持众多协议和链接方式。如 IP 、 TCP 、 UDP 、 IPv6 、 Socket 文件等。 常用示例 #编辑配置文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg global stats socket /var/lib/haproxy/stats mode 600 level admin #查看haproxy的状态 [roothaproxy ~]# echo show info | socat stdio /var/lib/haproxy/stats Name: HAProxy Version: 2.4.22-f8e3218 Release_date: 2023/02/14 Nbthread: 2 Nbproc: 1 Process_num: 1 Pid: 2104 Uptime: 0d 0h00m26s Uptime_sec: 26 …… #查看集群状态 [roothaproxy ~]# echo show servers state | socat stdio /var/lib/haproxy/stats 1 # be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port 2 webcluster 1 web1 192.168.0.10 2 0 1 1 80 6 3 7 6 0 0 0 - 80 - 0 0 - - 0 2 webcluster 2 web2 192.168.0.20 2 0 1 1 80 6 3 7 6 0 0 0 - 80 - 0 0 - - 0 2 webcluster 3 web_sorry 192.168.0.100 2 0 1 1 80 1 0 2 0 0 0 0 - 8080 - 0 0 - - 0 5 static 1 static 127.0.0.1 0 0 1 1 79 8 2 0 6 0 0 0 - 4331 - 0 0 - - 0 6 app 1 app1 127.0.0.1 0 0 1 1 79 8 2 0 6 0 0 0 - 5001 - 0 0 - - 0 6 app 2 app2 127.0.0.1 0 0 1 1 79 8 2 0 6 0 0 0 - 5002 - 0 0 - - 0 6 app 3 app3 127.0.0.1 0 0 1 1 79 8 2 0 6 0 0 0 - 5003 - 0 0 - - 0 6 app 4 app4 127.0.0.1 0 0 1 1 78 8 2 0 6 0 0 0 - 5004 - 0 0 - - 0 #查看集群的权重 [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 1 (initial 1) 临时修改权重 [roothaproxy ~]# echo set weight webcluster/web1 2 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 2 (initial 1) #下线后端服务器 [roothaproxy ~]# echo disable server webcluster/web1 | socat stdio /var/lib/haproxy/stats #上线后端服务器 [roothaproxy ~]# echo enable server webcluster/web1 | socat stdio /var/lib/haproxy/stats 如果开启多进程那么我们在对进程的 sock 文件进行操作时其对进程的操作时随机的 需要用多socat完成 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg
stats socket /var/lib/haproxy/stats1 mode 600 level admin process 1
stats socket /var/lib/haproxy/stats2 mode 600 level admin process 2
nbproc 2
cpu-map 1 0
cpu-map 2 1 这样每个进程就会有单独的 sock 文件来进行单独管理 四、haproxy的调度算法 1、静态调度算法 1static-rr基于权重的轮询调度 在listen或backend区域配置 balance static-rr 不⽀持权重的运⾏时调整及后端服务器慢启动其后端主机数量没有限制。weight默认为1。 listen web_host bind 192.168.7.101:80,:8801-8810,192.168.7.101:9001-9010 mode http/tcp log global balance static-rr server web1 192.168.7.103:80 weight 1 check inter 3000 fall 2 rise 5 server web2 192.168.7.104:80 weight 2 check inter 3000 fall 2 rise 5 2first
配置位置同上
根据服务器在列表中的位置自上而下进行调度 其只会当第一台服务器的连接数达到上限新请求才会分配给下一台服务 其会忽略服务器的权重设置 不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效 listen web_host bind 192.168.7.101:80,:8801-8810,192.168.7.101:9001-9010 mode http/tcp log global balance first server web1 192.168.7.103:80 maxconn 2 weight 1 check inter 3000 fall 2 rise 5 server web2 192.168.7.104:80 weight 1 check inter 3000 fall 2 rise 5 2、动态调度算法
1roundrobin
配置位置依然同上
基于后端服务器状态进行调度适当调整新请求将优先调度至当前负载较低的服务器 权重可以在haproxy运行时动态调整无需重启
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg listen webserver_80 bind 172.25.254.100:80 mode http balance roundrobin server webserver1 192.168.0.101:80 weight 1 check inter 3s fall 3 rise 5 server webserver2 192.168.0.102:80 weight 1 check inter 3s fall 3 rise 5 动态调度权重
[roothaproxy ~]# echo set weight webserver_80/webserver1 2 | socat stdio
/var/lib/haproxy/haproxy.sock
2leastconn
配置位置依旧同上
eastconn加权的最少连接的动态 支持权重的运行时调整和慢启动即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接) 比较适合长连接的场景使用比如MySQL等场景
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg listen webserver_80 bind 172.25.254.100:80 mode http balance leastconn server webserver1 192.168.0.101:80 weight 1 check inter 3s fall 3 rise 5 server webserver2 192.168.0.102:80 weight 1 check inter 3s fall 3 rise 5 五、haproxy的高级功能配置
1、基于cookie的会话保持 cookie value 为当前 server 指定 cookie 值实现基于 cookie 的会话黏性相对于基于 source 地址 hash 调度算法对客户端的粒度更精准但同时也加大了haproxy 负载目前此模式使用较少 已经被 session 共享服务器代替 修改配置文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg listen web_host bind 172.25.254.100:80 mode http log global balance roundrobin cookie SERVER-COOKIE insert indirect nocache server web1 10.0.0.201:80 cookie web1 check inter 3000 fall 3 rise 5 server web2 10.0.0.202:80 cookie web2 check inter 3000 fall 3 rise 5 测试
[rootnode5 ~]# curl --cookie SERVER-COOKIEweb1 http://172.25.254.100/index.html
server1 10.0.0.201
[rootnode5 ~]# curl --cookie SERVER-COOKIEweb2 http://172.25.254.100/index.html
server2 10.0.0.202
2、haproxy状态页
启用状态页 stats enable #基于默认的参数启用stats page stats hide-version #隐藏版本 stats refresh delay #设定自动刷新时间间隔 stats uri prefix #自定义stats page uri默认值/haproxy?stats stats realm realm #账户认证时的提示信息示例stats realm : HAProxy\ Statistics stats auth user:passwd #认证时的账号和密码可使用多次默认no authentication stats admin { if | unless } cond #启用stats page中的管理功能 配置状态页 listen stats bind :172.25.254.100:9999 stats enable #stats hide-version stats uri /haproxy-status stats realm HAPorxy\ Stats\ Page stats auth haadmin:123456 stats auth admin:123456 #stats refresh 30s #stats admin if TRUE 测试 backend server信息 session rate( 每秒的连接会话信息 ) Errors( 错误统计信息 ) cur: 每秒的当前会话数量 Req: 错误请求量 max: 每秒新的最大会话数量 conn: 错误链接量 limit: 每秒新的会话限制量 Resp: 错误响应量 sessions( 会话信息 ) Warnings( 警告统计信息 ) cur: 当前会话量 Retr: 重新尝试次数 max: 最大会话量 Redis: 再次发送次数 limit: 限制会话量 Total: 总共会话量 Server(real server 信息 ) LBTot: 选中一台服务器所用的总时间 Status: 后端机的状态包括 UP 和 DOWN Last 和服务器的持续连接时间 LastChk: 持续检查后端服务器的时间 Wght: 权重 Bytes( 流量统计 ) Act: 活动链接数量 In: 网络的字节输入总量 Bck: 备份的服务器数量 Out: 网络的字节输出总量 Chk: 心跳检测时间 Dwn: 后端服务器连接后都是 DOWN 的数量 Denied( 拒绝统计信息 ) Dwntme: 总的 downtime 时间 Req: 拒绝请求量 Thrtle:server 状态 Resp: 拒绝回复量 六、IP透传 web 服务器中需要记录客户端的真实 IP 地址用于做访问统计、安全防护、行为分析、区域排行等场景。 1、四层IP透传
[roothaproxy ~]# vim /etc/nginx/nginx.conf
修改配置文件 listen webserver_80 bind 172.25.254.100:80 mode tcp balance roundrobin server webserver1 192.168.0.101:80 send-proxy weight 1 check inter 3s fall 3 rise 5 查看日志内容
[roothaproxy ~]# tail -n 3 /var/log/nginx/access.log
2、七层IP透传
1haproxy配置
修改配置文件
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg listen webserver_80 option forwardfor bind 172.25.254.100:80 mode http balance roundrobin server webserver1 192.168.0.101:80 send-proxy weight 1 check inter 3s fall 3 rise 5 server webserver1 192.168.0.102:80 weight 1 check inter 3s fall 3 rise 5 2web服务器日志格式配置 修改配置文件
[roothaproxy ~]# vim /etc/nginx/nginx.conf 重启
systemctl restart nginx.service
查看日志
tail /var/log/nginx/access.log
七、ACL 访问控制列表 ACL Access Control Lists 是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤( 条件匹配 ) 即对接收到的报文进行匹配和过 滤基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL 、文件后缀等信息内 容进行匹配并执行进一步操作比如允许其通过或丢弃。 1、配置选项 acl aclname criterion [flags] [operator] [value] acl 名称 匹配规范 匹配模式 具体操作符 操作对象类型 2、ACL-criterion
定义ACL匹配规范 hdr[name [occ]]完全匹配字符串,header的指定信息 hdr_beg[name [occ]]前缀匹配header中指定匹配内容的begin hdr_end[name [occ]]后缀匹配header中指定匹配内容end hdr_dom[name [occ]]域匹配header中的domain name hdr_dir[name [occ]]路径匹配header的uri路径 hdr_len[name [occ]]长度匹配header的长度匹配 hdr_reg[name [occ]]正则表达式匹配自定义表达式(regex)模糊匹配 hdr_sub[name [occ]]子串匹配header中的uri模糊匹配 dst 目标IP dst_port 目标PORT src 源IP src_port 源PORT 示例 hdr(string) 用于测试请求头部首部指定内容 hdr_dom(host) 请求的host名称如 www.magedu.com hdr_beg(host) 请求的host开头如 www. img. video. download. ftp. hdr_end(host) 请求的host结尾如 .com .net .cn path_beg 请求的URL开头如/static、/images、/img、/css path_end 请求的URL中资源的结尾如 .gif .png .css .js .jpg .jpeg 有些功能是类似的比如以下几个都是匹配用户请求报文中host的开头是不是www acl short_form hdr_beg(host) www. acl alternate1 hdr_beg(host) -m beg www. acl alternate2 hdr_dom(host) -m beg www. acl alternate3 hdr(host) -m beg www. 3、ACL-flags
匹配模式
-i不区分大小写-m使用指定的pattern匹配方法-n 不做DNS解析-u禁止acl重名否则多个同名ACL匹配或关系
4、ACL-operator
ACL 操作符 1整数比较eq、ge、gt、le、lt 2字符比较
exact match (-m str) :字符串必须完全匹配模式substring match (-m sub) :在提取的字符串中查找模式如果其中任何一个被发现ACL将匹配prefix match (-m beg) :在提取的字符串首部中查找模式如果其中任何一个被发现ACL将匹配suffix match (-m end) :将模式与提取字符串的尾部进行比较如果其中任何一个匹配则ACL进行匹配subdir match (-m dir) :查看提取出来的用斜线分隔“/”的字符串如果其中任何一个匹配则ACL进行匹配domain match (-m dom) :查找提取的用点“.”分隔字符串如果其中任何一个匹配则ACL进行匹配
5、ACL-value
value的类型
Boolean #布尔值integer or integer range #整数或整数范围比如用于匹配端口范围IP address / network #IP地址或IP范围, 192.168.0.1 ,192.168.0.1/24string-- www.magedu.comexact –精确比较substring—子串suffix-后缀比较prefix-前缀比较subdir-路径 /wp-includes/js/jquery/jquery.jsdomain-域名www.magedu.comregular expression #正则表达式hex block #16进制
6、调用方式
与隐式默认使用或使用“or” 或 “||”表示否定使用“!“ 表示
示例 if valid_src valid_port #与关系,A和B都要满足为true if invalid_src || invalid_port #或A或者B满足一个为true if ! invalid_src #非取反A和B哪个也不满足为true
7、ACL的实例
修改配置文件
[roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg 重启
[roothaproxy conf.d]# systemctl restart haproxy.service
测试
curl www.test.com
curl www.timinglee.org
八、自定义错误页面
1、haproxy默认使用的错误页面
[roothaproxy ~]# rpm -ql haproxy24z-2.4.27-1.el7.zenetys.x86_64 | grep -E http$
/usr/share/haproxy/400.http
/usr/share/haproxy/403.http
/usr/share/haproxy/408.http
/usr/share/haproxy/500.http
/usr/share/haproxy/502.http
/usr/share/haproxy/503.http
/usr/share/haproxy/504.http
2、自定义的错误页面文件
errorfile code file
code #HTTP status code. 支持 200, 400, 403, 405, 408, 425, 429, 500, 502 503,504
file # 包含完整 HTTP 响应头的错误页文件的绝对路径。 建议后缀 .http 以和一般的 html 文件相区分
示例 errorfile 503 /haproxy/errorpages/503page.http 3、http重定向错误页面
errorloc code url
示例
errorloc 503 https://www.baidu.com
自定义错误文件
[roothaproxy ~]# mkdir /etc/haproxy/errorpage -p
[roothaproxy ~]# vim /etc/haproxy/errorpage/503.http
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg
[roothaproxy ~]# systemctl restart haproxy.service
[rootwebserver ~]# systemctl stop httpd
[rootwebserver2 ~]# systemctl stop nginx.service
[rootwebserver2 ~]# systemctl restart nginx.service
[rootwebserver2 ~]# systemctl status nginx.service
九、四层负载示例
在后台服务器安装和配置mariadb服务
[roothaproxy ~]#yum install mariadb-server -y
[rootserver ~]# yum install mariadb-server -y
[rootserver2 ~]# yum install mariadb-server -y
[rootserver ~]# vim /etc/my.cnf.d/mariadb-server.cnf[rootserver ~]# systemctl start mariadb.service
[rootserver2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf
[rootwebserver2 ~]# systemctl start mariadb.service 十、haproxy的https
证书制作
[roothaproxy ~]# mkdir -p /etc/haproxy/certs
[roothaproxy ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/timinglee.org.key -x509 -days 365 -out /etc/haproxy/certs/timinglee.org.crt
[roothaproxy ~]# ls /etc/haproxy/certs/ timinglee.org.crt timinglee.org.key
[roothaproxy ~]# cat /etc/haproxy/certs/timinglee.org.key /etc/haproxy/certs/timinglee.org.crt /etc/haproxy/certs/timinglee.pem
[roothaproxy ~]# cat /etc/haproxy/certs/timinglee.pemhttp配置
[roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service
最后测试即可