haproxy配置詳解

1、haproxy簡介

HAProxy是法國開發者 威利塔羅(Willy Tarreau) 2000年使用C語言開發的一個開源軟件
是一款具備高并發(萬級以上)、高性能的TCPHTTP負載均衡器
支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計
企業版網站:https://www.haproxy.com
社區版網站:http://www.haproxy.org
githubhttps://github.com/haprox

核心功能:?

  • 負載均衡(Load Balancing)
  1. 支持四層(TCP)和七層(HTTP/HTTPS)流量分發。
  2. 提供多種調度算法:輪詢(roundrobin)、最少連接(leastconn)、源IP哈希(source)等。

反向代理(Reverse Proxy)

  • 隱藏后端服務器細節,對外提供統一入口。
  • 支持 SSL 終端(SSL Termination),卸載后端服務器加密負擔。

高可用(High Availability)

  • 結合 Keepalived 實現雙機熱備(VRRP 協議)。

流量治理

  • 請求過濾、速率限制、連接控制等。

haproxy特點和優點:

  • 支持原生SSL,同時支持客戶端和服務器的SSL.
  • 支持IPv6和UNIX套字節(sockets)
  • 支持HTTP Keep-Alive
  • 支持HTTP/1.1壓縮,節省寬帶
  • 支持優化健康檢測機制(SSL、scripted TCP、check agent…)
  • 支持7層負載均衡。
  • 可靠性和穩定性非常好。
  • 并發連接 40000-50000個,單位時間處理最大請求 20000個,最大數據處理10Gbps.
  • 支持8種負載均衡算法,同時支持session保持。
  • 支持虛擬主機。
  • 支持連接拒絕、全透明代理。
  • 擁有服務器狀態監控頁面。
  • 支持ACL(access control list)。

多層級負載均衡

層級協議支持典型場景
四層(L4)TCP/UDP數據庫集群、Redis、SSH 跳板
七層(L7)HTTP/HTTPS/HTTP2/3Web 應用、API 網關、微服務路由

二、實驗

1、實驗環境的搭建

準備3臺主機:

主機1

主機名:haproxy

ip:172.25.254.100

主機2

主機名:RS1

ip:172.25.254.10

主機3

主機名:RS2

ip:172.25.254.20

1)軟件包安裝

兩臺RS都安裝nginx:

2)關閉火墻

兩臺RS關閉火墻

3)兩臺RS設置nginx的index.html內容

設置這個是方便后續測試

4)設置開機自啟動(兩個都設置)

5)連通測試

haproxy主機curl一下兩臺RS

?

關閉火墻

實驗環境搭建完畢\

2、haproxy的安裝和frontend區

1)安裝haproxy

dnf安裝

發現系統自帶,直接裝

2)進入haproxy配置文件?(最基本的負載均衡的調整)

進入編寫

?

進行tab鍵設置?

?重啟服務

?結果:

將option forwardfor注釋掉

結果

haproxy軟件基本信息
軟件安裝包: haproxy-2.4.22-3.el9_3.x86_64.rpm
啟動文件: /lib/systemd/system/haproxy.service
主配置目錄: /etc/haproxy/
主配置文件: /etc/haproxy/haproxy.cfg
子配置目錄: /etc/haproxy/conf.d
haproxy的基本配置信息
官方文檔:http://cbonte.github.io/haproxy-dconv/
HAProxy 的配置文件haproxy.cfg由兩大部分組成,分別是:
global:全局配置段
進程及安全配置相關的參數
性能調整相關參數
Debug參數
proxies:代理配置段
defaults:為frontend, backend, listen提供默認配置
frontend:前端,相當于nginx中的server {}
backend:后端,相當于nginx中的upstream {}
listen:同時擁有前端和后端配置,配置簡單,生產推薦使用

3、haproxy全局配置參數?(多進程與多線程)

解釋:

nbproc 2 —— 啟用多進程,2個進程
cpu-map 1 0 —— ?進程和cpu核心綁定防止cpu抖動從而減少系統資源消耗,1表示指定第一個work綁定第一個核心,0表示第一個核心,核心從0開始算(類似數組下標)
cpu-map 2 1 —— 指定第二個work綁定第二個cpu核心

global
log             127.0.0.1     local2                 #定義全局的syslog服務器;日志服務器需要開啟UDP協議,最多可以定義兩個 chroot         /var/lib/haproxy                      #鎖定運行目錄 
pidfile        /var/run/haproxy.pid                  #指定pid文件 
maxconn        100000                                #指定最大連接數 
user           haproxy                               #指定haproxy的運行用戶 
group          haproxy                               #指定haproxy的運行組 
daemon                                               #指定haproxy以守護進程方式運行 
# turn on stats unix socket 
stats          socket /var/lib/haproxy/stats         #指定haproxy的套接字文件 
nbproc         2                                     #指定haproxy的work進程數量,默認是1個 
cpu-map        1 0                                   #指定第一個work綁定第一個cpu核心 
cpu-map        2 1                                   #指定第二個work綁定第二個cpu核心 nbthread       2                                     #指定haproxy的線程數量,默認每個進程一個線程,此參數與nbproc互斥 maxsslconn     100000                                #每個haproxy進程ssl最大連接數,用于haproxy配置了證書的場景下 maxconnrate    100                                   #指定每個客戶端每秒建立連接的最大數量
參數說明
daemon以守護進程(后臺)模式運行
user
group
指定運行用戶/用戶組(降權運行)
chroot切換根目錄(增強安全性)
nbproc工作進程數(CPU 核數綁定)
nbthread每進程線程數(需啟用線程)
stats socket管理套接字路徑(動態調整配置)

?重啟服務

查看多進程信息?

多進程與多線程互斥,只能存在一個

解釋:

nbthread —— 啟動多線程,線程數為2??

查看多線程

?

thread為2

proxies配置:

主要分為下面4個部分

defaults [<name>]? ? ? ? ? ?# 默認配置項,針對以下的frontend、backend和lsiten生效,可以多個name也可以沒有name
frontend <name>? ? ? ? ? ? # 前端servername,類似于Nginx的一個虛擬主機 server和LVS服務集群

backend <name>? ? ? ? ? ?# 后端服務器組,等于nginx的upstreamLVS中的RS服務器
listen <name>? ? ? ? ? ? ? ? # 將frontend和backend合并在一起配置,相對于frontend和backend

配置更簡潔,生產常用
注意:
name字段只能使用大小寫字母,數字,‘-’(dash)'_‘(underscore)'.' (dot) ':'(colon),并且嚴格區分大小寫。
1)proxies 配置-defaults

defaults mode    http                   #HAProxy實例使用的連接協議 log    global                  #指定日志地址和記錄日志條目的 
syslog/rsyslog日志設備 #此處的 global表示使用 global配置段中設定的log值。 、option  httplog               #日志記錄選項,httplog表示記錄與 HTTP 會話相關的各種屬性值 #包括 HTTP請求、會話狀態、連接數、源地 址以及連接時間等 option dontlognull            #dontlognull表示不記錄空會話連接日志 option http-server-close      #等待客戶端完整HTTP請求的時間,此處為等 待10s。option forwardfor except 127.0.0.0/8 #透傳客戶端真實IP至后端web服務器 #在apache配置文件中加入:<br>%{X- Forwarded-For}i #后在webserver中看日志即可看到地址透傳 信息 option redispatch             #當server Id對應的服務器掛掉后,強制定 向到其他健康的服務器,重新派發 option http-keep-alive        #開啟與客戶端的會話保持 retries 3                     #連接后端服務器失敗次數timeout http-request 10s      #等待客戶端請求完全被接收和處理的最長時間 timeout queue 1m              #設置刪除連接和客戶端收到503或服務不可用等提示信息前的等待時間 timeout connect 120s          #設置等待服務器連接成功的時間 timeout client 600s           #設置允許客戶端處于非活動狀態,即既不發送數據也不接收數據的時間 timeout server 600s           #設置服務器超時時間,即允許服務器處于既不接收也不發送數據的非活動時間   timeout http-keep-alive 60s   #session 會話保持超時時間,此時間段內會轉發到相同的后端服務器                             timeout check 10s             #指定后端服務器健康檢查的超時時間 maxconn 3000                  #承受最大連接數量default-server inter 1000 weight 3  #對后端服務器的檢測為1000毫秒一次,weight 3 表示權重
2)proxies 配置-frontend和backend

    bind     *:80              # 監聽端口,即 haproxy 提供web服務的端口,和 lvs 的vip端口類似 mode     http              # http的7層模式use_backend webserver      # 調用的后端為webserverbalance  roundrobin        # 輪詢調用

?server 配置

#針對一個server配置
check ????????????????????????#對指定real進行健康狀態檢查,如果不加此設置,默認不開啟檢查,只有check后面沒有其它配置也可以啟用檢查功能
???????????????????????????????????#默認對相應的后端服務器IP和端口,利用TCP連接進行周期性健康性檢查,注意必須指定端口才能實現健康性檢查
addr <IP>? ? ? ? ? ? ? ? ? ??#可指定的健康狀態監測IP,可以是專門的數據網段,減少業務網絡的流量
port <num>? ? ? ? ? ? ? ? ??#指定的健康狀態監測端口
inter <num>? ? ? ? ? ? ? ? ?#健康狀態檢查間隔時間,默認2000 ms
fall <num> ??????????????????#后端服務器從線上轉為線下的檢查的連續失效次數,默認為3
rise <num>??????????????????#后端服務器從下線恢復上線的檢查的連續有效次數,默認為2
weight <weight> ?????????#默認為1,最大值為2560(狀態為藍色)表示不參與負載均衡,但仍接受持久連接
backup ????????????????????????#將后端服務器標記為備份狀態,只在所有非備份主機down機時提供服務,類似SorryServer
disabled? ? ? ? ? ? ? ? ? ? ? #將后端服務器標記為不可用狀態,即維護狀態,除了持久模式
???????????????????????????????????#將不再接受連接,狀態為深黃色,優雅下線,不再接受新用戶的請求
redirect prefix http://www.baidu.com/ #將請求臨時(302)重定向至其它URL,只適用于http模式
maxconn <maxconn> #當前后端server的最大并發連接數
3)proxies 配置-listen

使用listen替換 frontendbackend的配置方式,可以簡化設置,通常只用于TCP協議的應用

socat 工具
對服務器動態權重和其它狀態可以利用 socat工具進行調整,Socat Linux 下的一個多功能的網絡工具,名字來由是Socket CAT,相當于netCAT的增強版.Socat 的主要特點就是在兩個數據流之間建立雙向通道,且支持眾多協議和鏈接方式。如 IPTCP UDPIPv6Socket文件等

4、HAProxy算法

所有算法在主配置文件配置/etc/haproxy/haproxy.cfg

vim /etc/haproxy/haproxy.cfg ---編輯配置文件

HAProxy通過固定參數 balance 指明對后端服務器的調度算法
balance參數可以配置在listenbackend選項中。
HAProxy的調度算法分為靜態和動態調度算法
有些算法可以根據參數在靜態和動態算法中相互轉換。
靜態算法
靜態算法:按照事先定義好的規則輪詢公平調度,不關心后端服務器的當前負載、連接數和響應速度等,且無法實時修改權重(只能為01,不支持其它值),只能靠重啟HAProxy生效。
static-rr

static-rr---基于權重的輪詢調度

不支持運行時利用socat進行權重的動態調整(只支持01,不支持其它值)
不支持端服務器慢啟動
其后端主機數量沒有限制,相當于LVS中的 wrr

statick-rr 按照預先配置的順序和權重,將客戶端請求依次分配給后端服務器。當所有服務器都被分配一次后,算法會從頭開始循環

配置文件

運行

first
  • 根據服務器在列表中的位置,自上而下進行調度
  • 其只會當第一臺服務器的連接數達到上限,新請求才會分配給下一臺服務
  • 其會忽略服務器的權重設置
  • 不支持用socat進行動態修改權重,可以設置01,可以設置其它值但無效

配置文件?

運行

重新配置

運行

動態算法
動態算法
  • 基于后端服務器狀態進行調度適當調整,
  • 新請求將優先調度至當前負載較低的服務器
  • 權重可以在haproxy運行時動態調整無需重啟
roundrobin
  • 基于權重的輪詢動態調度算法,
  • 支持權重的運行時調整,不同于lvs中的rr輪訓模式,
  • HAProxy中的roundrobin支持慢啟動(新加的服務器會逐漸增加轉發數)
  • 其每個后端backend中最多支持4095real server
  • 支持對real server權重動態調整,
  • roundrobin為默認調度算法,此算法使用廣泛

配置文件?運行

leastconn
  • leastconn加權的最少連接的動態
  • 支持權重的運行時調整和慢啟動,即:根據當前連接最少的后端服務器而非權重進行優先調度(新客戶端連接)
  • 比較適合長連接的場景使用,比如:MySQL等場景。

配置文件?

運行

其他算法
其它算法即可作為靜態算法,又可以通過選項成為動態算法
source
源地址hash,基于用戶源地址hash并將請求轉發到后端服務器,后續同一個源地址請求將被轉發至同一個后端web服務器。此方式當后端服務器數據量發生變化時,會導致很多用戶的請求轉發至新的后端服務器,默認為靜態方式,但是可以通過hash-type支持的選項更改這個算法一般是在不插入CookieTCP模式下使用,也可給拒絕會話cookie的客戶提供最好的會話粘性,適用于session會話保持但不支持cookie和緩存的場景源地址有兩種轉發客戶端請求到后端服務器的服務器選取計算方式,分別是取模法和一致性hash

這個算法用到的是?map-base 取模法

map-base 取模法
map-based:取模法,對source地址進行hash計算,再基于服務器總權重的取模,最終結果決定將此請求轉發至對應的后端服務器。
此方法是靜態的,即不支持在線調整權重,不支持慢啟動,可實現對后端服務器均衡調度
缺點是當服務器的總權重發生變化時,即有服務器上線或下線,都會因總權重發生變化而導致調度結果整體改變

配置文件?

運行

變為動態的配置文件

變為動態的算法

一致性hash
一致性哈希,當服務器的總權重發生變化時,對調度結果影響是局部的,不會引起大的變動hash(o)mod n
hash算法是動態的,支持使用 socat等工具進行在線權重調整,支持慢啟動
算法
1、后端服務器哈希環點keyA=hash(后端服務器虛擬ip)%(2^32)
2、客戶機哈希環點key1=hash(client_ip)%(2^32) 得到的值在[0---4294967295]之間,
3、將keyAkey1都放在hash環上,將用戶請求調度到離key1最近的keyA對應的后端服務器

hash環偏斜問題?

增加虛擬服務器IP數量,比如:一個后端服務器根據權重為1生成1000個虛擬IP,再hash。而后端服務器權重為2則生成2000的虛擬IP,再bash,最終在hash環上生成3000個節點,從而解決hash環偏斜問題
hash對象
Hash對象到后端服務器的映射關系:

?

uri
基于對用戶請求的URI的左半部分或整個urihash,再將hash結果對總權重進行取模后
根據最終結果將請求轉發到后端指定服務器
適用于后端是緩存服務器場景
默認是靜態算法,也可以通過hash-type指定map-basedconsistent,來定義使用取模法還是一致性hash
注意:此算法基于應用層,所以只支持 mode http ,不支持 mode tcp
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
左半部分:/<path>;<params>
整個uri/<path>;<params>?<query>#<frag>

配置文件?

運行

?

url_param
url_param對用戶請求的url中的 params 部分中的一個參數key對應的value值作hash計算,并由服務器總權重相除以后派發至某挑出的服務器,后端搜索同一個數據會被調度到同一個服務器,多用于電商
通常用于追蹤用戶,以確保來自同一個用戶的請求始終發往同一個real server
如果無沒key,將按roundrobin算法

配置文件

運行

hdr
針對用戶每個http頭部(header)請求中的指定信息做hash
此處由 name 指定的http首部將會被取出并做hash計算,
然后由服務器總權重取模以后派發至某挑出的服務器,如果無有效值,則會使用默認的輪詢調度。

配置文件?

運行

算法總結
#靜態
static-rr--------->tcp/http
first------------->tcp/http
#動態
roundrobin-------->tcp/http
leastconn--------->tcp/http
random------------>tcp/http
#以下靜態和動態取決于hash_type是否consistent
source------------>tcp/http
Uri--------------->http
url_param--------->http
hdr--------------->http
各算法使用場景?
first #使用較少
static-rr #做了session共享的web集群
roundrobin
random
leastconn #數據庫
source
#基于客戶端公網IP的會話保持
Uri--------------->http #緩存服務器,CDN服務商,藍汛、百度、阿里云、騰訊
url_param--------->http #可以實現session保持
hdr #基于客戶端請求報文頭部做下一步處理

5、基于cookie值的會話保持

  • 基于 Cookie 值的會話保持(也稱為 "粘性會話")是一種常用的負載均衡策略,確保來自同一客戶端的請求始終被路由到同一后端服務器,從而維護會話狀態的一致性。這種機制特別適用于不支持分布式會話的應用程序
  • cookie value:為當前server指定cookie值,實現基于cookie的會話黏性,相對于基于 source 地址hash調度算法對客戶端的粒度更精準,但同時也加大了haproxy負載,目前此模式使用較少, 已經被session共享服務器代替

注意:不支持 tcp mode,使用 http mode?

目的:?解決有狀態應用(Stateful Application)的問題。例如,用戶的購物車數據、登錄會話信息等通常存儲在特定后端服務器的內存或本地緩存中。如果用戶的后續請求被負載均衡到不同的服務器,這些狀態信息將丟失,導致應用出錯。

?配置

測試

-b 指定cookie值

可以看到訪問cookie值為servera時,被調度到RS1處理;?cookie值為serverb時,被調度到RS2處理,與我們在haproxy配置文件里配置的一致。

6、HAProxy狀態頁

HAProxy 的狀態頁(Stats Page)?是實時監控負載均衡集群的核心工具,通過 Web 頁面展示關鍵性能指標和后端節點狀態。

狀態頁配置項
stats enable???????????????????????? #基于默認的參數啟用stats page
stats hide-version???????????????? #將狀態頁中haproxy版本隱藏
stats refresh <delay> ???????????#設定自動刷新時間間隔,默認不自動刷新
stats uri <prefix> ????????????????#自定義stats page uri,默認值:/haproxy?stats
stats auth <user>:<passwd> #認證時的賬號和密碼,可定義多個用戶,每行指定一個用戶
???????????????????????????????????????????????#默認:no authentication
stats admin { if | unless } <cond> #啟用stats page中的管理功能

實驗配置?

?

測試

加上stats refresh后面加上數字表示自動刷新的間隔

#pid為當前pid號,process為當前進程號,nbproc和nbthread為一共多少進程和每個進程多少個線程 
pid = 27134 (process #1, nbproc = 1, nbthread = 1) #啟動了多長時間 
uptime = 0d 0h00m04s #系統資源限制:內存/最大打開文件數/ 
system limits: memmax = unlimited; ulimit-n = 200029 #最大socket連接數/單進程最大連接數/最大管道數maxpipes 
maxsock = 200029; maxconn = 100000; maxpipes = 0 #當前連接數/當前管道數/當前連接速率 
current conns = 2; current pipes = 0/0; conn rate = 2/sec; bit rate = 0.000 kbps#運行的任務/當前空閑率 
Running tasks: 1/14; idle = 100 % active UP:                 #在線服務器 
backup UP:                 #標記為backup的服務器 
active UP, going down:     #監測未通過正在進入down過程 
backup UP, going down:     #備份服務器正在進入down過程 
active DOWN, going up:     #down的服務器正在進入up過程 
backup DOWN, going up:     #備份服務器正在進入up過程 
active or backup DOWN:     #在線的服務器或者是backup的服務器已經轉換成了down狀態 
not checked:               #標記為不監測的服務器 #active或者backup服務器人為下線的 
active or backup DOWN for maintenance (MAINT) #active或者backup被人為軟下線(人為將weight改成0) 
active or backup SOFT STOPPED for maintenance
?backend server信息

session rate(每秒的連接會話信息):
Errors(錯誤統計信息)
cur:每秒的當前會話數量 :
Req:錯誤請求量
max:每秒新的最大會話數量
conn:錯誤鏈接量
limit:每秒新的會話限制量
Resp:錯誤響應量
sessions(會話信息):
Warnings(警告統計信息)
cur:當前會話量
Retr:重新嘗試次數
max:最大會話量
Redis:再次發送次數
limit: 限制會話量
Total:總共會話量
Server(real server信息)
LBTot:選中一臺服務器所用的總時間
Status:后端機的狀態,包括UPDOWN
Last:和服務器的持續連接時間
LastChk:持續檢查后端服務器的時間
Wght:權重
Bytes(流量統計)
Act:活動鏈接數量
In:網絡的字節輸入總量
Bck:備份的服務器數量
Out:網絡的字節輸出總量
Chk:心跳檢測時間
Dwn:后端服務器連接后都是DOWN的數量
Denied(拒絕統計信息)
Dwntme:總的downtime時間
Req:拒絕請求量
Thrtle:server 狀態
Resp:拒絕回復量

?7、IP透傳

HAProxy 的 IP 透傳 是指將原始客戶端的真實 IP 地址傳遞給后端服務器,而不是讓后端服務器只看到 HAProxy 自身的 IP 地址。這對于后端應用至關重要,因為它需要知道真實的客戶端信息來進行日志記錄、訪問控制、地理定位、速率限制、安全審計等操作。?

HAProxy 本身作為反向代理或負載均衡器,是客戶端與后端服務器之間的中間節點。默認情況下,后端服務器看到的 TCP 連接源 IP 地址就是 HAProxy 的 IP 地址。

7層ip透傳

當haproxy工作在七層的時候,也可以透傳客戶端真實IP至后端服務器

進入haproxy配置文件

開啟Listen就把frontend和backend關了

4層ip透傳
1)未開啟時

未開啟4層ip透傳時的各種配置:

haproxy.cfg

?

兩臺RS都要配置

未開啟4層ip透傳時的訪問測試極其日志:

訪問測試

日志查看

在一臺RS上查看nginx日志會發現,其真實訪問源地址是看不到的(紅框為-)

開啟時

開啟4層ip透傳時的各種配置:

nginx.conf(兩臺RS都要配置)

開啟4層ip透傳時的訪問測試極其日志:

訪問測試

?查看日志nginx

?這樣就能看到源ip地址

8、ACL

訪問控制列表ACLAccess Control Lists
是一種基于包過濾的訪問控制技術

HAProxy 的 ACL 是其核心功能之一,用于定義復雜的流量匹配規則,實現基于請求內容(如 URL、Header、IP、路徑等)的智能路由、過濾或決策。

前置要求

將proxy_protocol去掉

Client里做解析

先在Client里做域名解析,不然后續測試訪問不了

解析在/etc/hosts做

這樣就有解析了

基本配置

開啟frontend、backend

其余的listen注釋掉

ACL配置選項
基本語法
acl來定義或聲明一個acl
acl ????????<aclname>???????? <criterion>????????[flags] ????????[operator] ????????[<value>]
acl ????????名稱 ????????????????????匹配規范 ????????匹配模式 ???具體操作符? ? ?操作對象類型
ACL-Name 名稱
#ACL名稱,可以使用大字母A-Z、小寫字母a-z、數字0-9、冒號:、點.、中橫線和下劃線,并且嚴格區分大小寫,比如:my_aclMy_Acl就是兩個完全不同的acl5.8.1.2 ACL-criterion。
ACL-criterion 匹配規則

路徑匹配((URL Path)

條件類型說明
path精確匹配路徑
path_beg路徑開頭匹配
path_end路徑結尾匹配
path_sub路徑包含子串
path_dir包含目錄匹配
path_reg正則表達式匹配
path_len路徑長度比較

域名/主機頭匹配 (Host)

條件類型說明
hdr(host)精確匹配 Host 頭
hdr_reg(host)正則匹配 Host
hdr_dom
同 hdr(host) (舊式寫法)

HTTP頭部匹配

語法說明
hdr(<name>)檢查頭部存在/值
hdr_sub(<name>)頭部包含子串
hdr_reg(<name>)正則匹配頭部值
hdr_cnt(<name>)頭部數量檢查
hdr_beg(<name>)頭部開頭匹配

HTTP方法/版本

條件類型說明
methodHTTP方法匹配
method_len方法長度比較
verHTTP版本
標志項詳解
標志說明示例
-i忽略大小寫hdr(host) -i EXAMPLE.COM
-m匹配模式-m str:字符串匹配
-m beg:開頭匹配
-m end:結尾匹配
-m sub:子串匹配
-m reg:正則匹配
-m found:存在即匹配
-f從文件加載src -f /path/to/ip.list
-n數值比較path_len -n gt 100
ACL-operator 具體操作符
ACL 操作符
整數比較:eqgegtlelt
字符比較:
  • 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進行匹配
ACL-value 操作對象
value的類型
The ACL engine can match these types against patterns of the following types :
  • Boolean #布爾值
  • integer or integer range #整數或整數范圍,比如用于匹配端口范圍
  • IP address / network #IP地址或IP范圍, 192.168.0.1 ,192.168.0.1/24
  • string--> www.timinglee.org

????????????????????????exact???????????????????????? #精確比較

????????????????????????substring ???????????????????#子串

????????????????????????suffix???????????????????????? #后綴比較

????????????????????????prefix ????????????????????????#前綴比較

????????????????????????subdir ????????????????????????#路徑, /wp-includes/js/jquery/jquery.js

????????????????????????domain? ? ? ? ? ? ? ? ? ? ?? #域名,www.timinglee.org

  • regular expression #正則表達式
  • hex block #16進制
ACL實驗

?

?訪問

實驗——域名匹配

配置

訪問

9、自定義錯誤頁面

概念

在 HAProxy 中,自定義報錯頁面是一項關鍵功能,它允許你替換 HAProxy 生成的默認錯誤響應(通常是簡短、技術性的純文本或 JSON),為用戶或客戶端提供更友好、更專業、更具品牌特色或包含更多指導信息的 HTML 錯誤頁面。?

實驗

建立自定義報錯文件

???

測試

關閉兩個RS的nginx,模擬服務斷開

然后瀏覽器訪問ip,就能看到自定義報錯界面了

10、證書

(1)證書制作

所有主機都關閉SELinux(命令setenforce 0)

按照提示來輸入名字那些

之后將key和crt一起放到.pem里

這樣證書就生成完畢了

進haproxy配置文件配置?

訪問

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93011.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計網-TCP可靠傳輸

TCP&#xff08;傳輸控制協議&#xff09;的可靠傳輸是通過一系列機制保證數據準確、有序、不丟失地到達接收方。以下是TCP可靠傳輸的詳細過程及核心機制&#xff1a;1. 數據分塊與序列號&#xff08;Seq&#xff09;分塊&#xff1a;應用層數據被分割成適合傳輸的TCP報文段&am…

數智管理學(三十九)

第三章 數智化對管理理論的沖擊第三節 系統理論與生態化管理的強化系統理論作為理解企業運作與環境互動的重要框架&#xff0c;一直強調企業是一個由多個相互關聯子系統構成的整體&#xff0c;其核心要素包括整體性、開放性、動態性和反饋機制。在傳統管理視角下&#xff0c;這…

哈希表(c語言)

文章目錄哈希表哈希表知識點哈希表概念負載因子哈希表的優缺點哈希沖突哈希函數常見哈希函數處理哈希沖突開放定址法線性探測二次探測鏈地址法哈希表的實現哈希表的核心:HashMap核心函數&#xff1a;從創建到銷毀創建哈希表&#xff1a;hashmap_create()銷毀哈希表:hashmap_des…

【Canvas與旗幟】條紋版大明三辰旗

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十三條紋版大明三辰旗 Draft1</title><style type"text/…

【Java】空指針(NullPointerException)異常深度攻堅:從底層原理到架構級防御,老司機的實戰經驗

寫Java代碼這些年&#xff0c;空指針異常&#xff08;NullPointerException&#xff09;就像甩不掉的影子。線上排查問題時&#xff0c;十次有八次最后定位到的都是某個對象沒處理好null值。但多數人解決問題只停留在加個if (obj ! null)的層面&#xff0c;沒從根本上想過為什么…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 主頁-評論用戶時間占比環形餅狀圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解主頁-評論用戶時間占比環形餅狀圖實現 視頻…

Redis面試精講 Day 5:Redis內存管理與過期策略

【Redis面試精講 Day 5】Redis內存管理與過期策略 開篇 歡迎來到"Redis面試精講"系列的第5天&#xff01;今天我們將深入探討Redis內存管理與過期策略&#xff0c;這是面試中經常被問及的核心知識點。對于后端工程師而言&#xff0c;理解Redis如何高效管理內存、處…

ICMPv6報文類型詳解表

一、錯誤報文類型&#xff08;Type 1-127&#xff09;Type值名稱Code范圍觸發條件示例典型用途1Destination Unreachable0-60: 無路由到目標1: 通信被管理員禁止2: 地址不可達3: 端口不可達4: 分片需要但DF標志設置5: 源路由失敗6: 目的地址不可達網絡故障診斷2Packet Too Big0…

配置nodejs

第一步確認 node.exe 和 npm 存在 例如安裝目錄D:\nodejs檢查是否存在以下文件&#xff1a; node.exenpm.cmdnpx.cmd 第二步&#xff1a;添加環境變量 PATH 圖形化操作步驟&#xff08;Windows&#xff09;&#xff1a; 右鍵「此電腦」→「屬性」點擊左側 「高級系統設置」彈出…

MySQL的命令行客戶端

MySQL中的一些程序&#xff1a;MySQL在安裝完成的時候&#xff0c;一般都會包含如下程序&#xff1a;在Linux系統下&#xff0c;通過/usr/bin目錄下&#xff0c;可以通過命令查看&#xff1a;以下是常用的MySQL程序&#xff1a;程序名作用mysqldMySQL的守護進程即MySQL服務器&a…

C# 值類型與引用類型的儲存方式_堆棧_

目錄 值類型 引用類型 修改stu3的值 stu也被修改了 為什么? &#xff08;對象之間&#xff09; 值類型中&#xff0c;值全在棧中單獨存儲&#xff0c;變量之間不會影響 結構體中&#xff0c;結構體全在棧中&#xff0c;結構體與結構體之間也不會相互影響 靜態資源區 值類…

解鎖永久會員的白噪音軟件:睡眠助手

如今的年輕人壓力普遍較大&#xff0c;學會解壓至關重要。這期就為大家推薦一款優秀的白噪音軟件&#xff0c;在壓力大時聽聽&#xff0c;能起到不錯的解壓效果。 睡眠助手 文末獲取 這款軟件的特別版本十分出色&#xff0c;知曉的人不多。它已解鎖永久會員&#xff0c;無需登…

uniapp使用css實現進度條帶動畫過渡效果

一、效果 二、實現原理 1.uni.createAnimation 動畫函數 2.初始化uni.createAnimation方法 3.監聽值的變化調用動畫執行方法 三、代碼 1.實現方式比較簡單&#xff0c;目前是vue3的寫法&#xff0c;vue2只需要稍微改動即可 <template><view class"layout_progre…

高級分布式系統調試:調試的科學與 USE 方法實戰

高級分布式系統調試:調試的科學與 USE 方法實戰 前言:從“救火”到“探案” 當一個復雜的分布式系統出現“灰色故障”——例如“服務有時會變慢”、“偶爾出現超時錯誤”——我們該從何處著手?隨機地查看 Grafana 儀表盤,或者漫無目的地 tail -f 日志,往往效率低下,甚至…

棧算法之【有效括號】

目錄 LeetCode-20題 LeetCode-20題 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每…

大模型——Data Agent:超越 BI 與 AI 的邊界

Data Agent:超越 BI 與 AI 的邊界 1. 數據工具的演進路徑 在數據分析領域,技術工具經歷了多個階段的演進。這些演進不僅反映了技術的進步,也體現了用戶需求和使用場景的變化。 Excel 時代:告別手工作業,陷入“表格泥潭“,早期數據分析依賴 Excel,實現基礎數據記錄、計…

數據空間技術在智慧水庫管理平臺中的賦能

數據空間技術在智慧水庫管理平臺中的賦能&#xff1a;設備到應用的數據傳輸優化 數據空間技術為智慧水庫管理平臺提供了革命性的數據傳輸、處理和安全保障能力。以下是數據空間技術在設備到應用數據傳輸過程中的全面賦能方案&#xff1a; 數據空間賦能架構設計 #mermaid-svg-R2…

SpringBoot學習路徑二--Spring Boot自動配置原理深度解析

SpringBoot最核心的功能就是自動裝配&#xff0c;Starter作為SpringBoot的核心功能之一&#xff0c;基于自動配置代碼提供了自動配置模塊及依賴的能力&#xff0c;讓軟件集成變得簡單、易用。使用SpringBoot時&#xff0c;我們只需引I人對應的Starter&#xff0c;SpringBoot啟動…

音視頻中一些常見的知識點

1. GCC是如何進行帶寬評估的 GCC(Google Congestion Control)是一種專為實時音視頻傳輸設計的擁塞控制算法,它主要通過發送端和接收端的協同工作來進行帶寬評估。具體過程如下: 接收端處理 計算延遲梯度:接收端通過統計數據包到達時間的變化,即RTT(往返時間)波動,來計…

STM32硬件I2C的注意事項

文章目錄軟件模擬I2C硬件的實現方式最近在研究I2C的屏幕使用。有兩種使用方式&#xff0c;軟件模擬I2C、硬件HAL使用I2C。軟件模擬I2C 發送數據是通過設置引腳的高低電平實現的。 /*引腳配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(x)) #de…