HAProxy關鍵配置詳解
阿新 • • 發佈:2018-12-19
HAProxy的配置檔案共有5個域
- global:用於配置全域性引數
- default:用於配置所有frontend和backend的預設屬性
- frontend:用於配置前端服務(即HAProxy自身提供的服務)例項
- backend:用於配置後端服務(即HAProxy後面接的服務)例項組
- listen:frontend+backend的組合配置,可以理解成更簡潔的配置方法
global域的配置
- daemon:指定HAProxy以後臺模式執行,通常情況下都應該使用這一配置
- user [username] :指定HAProxy程序所屬的使用者
- group [groupname] :指定HAProxy程序所屬的使用者組
- log [address] [device] [maxlevel] [minlevel]:日誌輸出配置,如log 127.0.0.1 local0 info warning,即向本機rsyslog或syslog的local0輸出info到warning級別的日誌。其中[minlevel]可以省略。HAProxy的日誌共有8個級別,從高到低為emerg/alert/crit/err/warning/notice/info/debug
- pidfile :指定記錄HAProxy程序號的檔案絕對路徑。主要用於HAProxy程序的停止和重啟動作。
- maxconn :HAProxy程序同時處理的連線數,當連線數達到這一數值時,HAProxy將停止接收連線請求
frontend域的配置
- acl [name] [criterion] [flags] [operator] [value]:定義一條ACL,ACL是根據資料包的指定屬性以指定表示式計算出的true/false值。如"acl url_ms1 path_beg -i /ms1/"定義了名為url_ms1的ACL,該ACL在請求uri以/ms1/開頭(忽略大小寫)時為true
- bind [ip]:[port]:frontend服務監聽的埠
- default_backend [name]:frontend對應的預設backend
- disabled:禁用此frontend
- http-request [operation] [condition]:對所有到達此frontend的HTTP請求應用的策略,例如可以拒絕、要求認證、新增header、替換header、定義ACL等等。
- http-response [operation] [condition]:對所有從此frontend返回的HTTP響應應用的策略,大體同上
- log:同global域的log配置,僅應用於此frontend。如果要沿用global域的log配置,則此處配置為log global
- maxconn:同global域的maxconn,僅應用於此frontend
- mode:此frontend的工作模式,主要有http和tcp兩種,對應L7和L4兩種負載均衡模式
- option forwardfor:在請求中新增X-Forwarded-For Header,記錄客戶端ip
- option http-keep-alive:以KeepAlive模式提供服務
- option httpclose:與http-keep-alive對應,關閉KeepAlive模式,如果HAProxy主要提供的是介面型別的服務,可以考慮採用httpclose模式,以節省連線數資源。但如果這樣做了,介面的呼叫端將不能使用HTTP連線池
- option httplog:開啟httplog,HAProxy將會以類似Apache HTTP或Nginx的格式來記錄請求日誌
- option tcplog:開啟tcplog,HAProxy將會在日誌中記錄資料包在傳輸層的更多屬性
- stats uri [uri]:在此frontend上開啟監控頁面,通過[uri]訪問
- stats refresh [time]:監控資料重新整理週期
- stats auth [user]:[password]:監控頁面的認證使用者名稱密碼
- timeout client [time]:指連線建立後,客戶端持續不傳送資料的超時時間
- timeout http-request [time]:指連線建立後,客戶端沒能傳送完整HTTP請求的超時時間,主要用於防止DoS類攻擊,即建立連線後,以非常緩慢的速度傳送請求包,導致HAProxy連線被長時間佔用
- use_backend [backend] if|unless [acl]:與ACL搭配使用,在滿足/不滿足ACL時轉發至指定的backend
backend域的關鍵配置
- acl:同frontend域
- balance [algorithm]:在此backend下所有server間的負載均衡演算法,常用的有roundrobin和source,完整的演算法說明見官方文件configuration.html#4.2-balance
- cookie:在backend server間啟用基於cookie的會話保持策略,最常用的是insert方式,如cookie HA_STICKY_ms1 insert indirect nocache,指HAProxy將在響應中插入名為HA_STICKY_ms1的cookie,其值為對應的server定義中指定的值,並根據請求中此cookie的值決定轉發至哪個server。indirect代表如果請求中已經帶有合法的HA_STICK_ms1 cookie,則HAProxy不會在響應中再次插入此cookie,nocache則代表禁止鏈路上的所有閘道器和快取伺服器快取帶有Set-Cookie頭的響應。
- default-server:用於指定此backend下所有server的預設設定。具體見下面的server配置。
- disabled:禁用此backend
- http-request/http-response:同frontend域
- log:同frontend域
- mode:同frontend域
- option forwardfor:同frontend域
- option http-keep-alive:同frontend域
- option httpclose:同frontend域
- option httpchk [METHOD] [URL] [VERSION]:定義以http方式進行的健康檢查策略。如option httpchk GET /healthCheck.html HTTP/1.1
- option httplog:同frontend域
- option tcplog:同frontend域
- server [name] [ip]:[port] [params]:定義backend中的一個後端server,[params]用於指定這個server的引數
- timeout connect [time]:指HAProxy嘗試與backend server建立連線的超時時間
- timeout check [time]:預設情況下,健康檢查的連線+響應超時時間為server命令中指定的inter值,如果配置了timeout check,HAProxy會以inter作為健康檢查請求的連線超時時間,並以timeout check的值作為健康檢查請求的響應超時時間
- timeout server [time]:指backend server響應HAProxy請求的超時時間
default域
上文所屬的frontend和backend域關鍵配置中,除acl、bind、http-request、http-response、use_backend外,其餘的均可以配置在default域中。default域中配置了的專案,如果在frontend或backend域中沒有配置,將會使用default域中的配置。
listen域
listen域是frontend域和backend域的組合,frontend域和backend域中所有的配置都可以配置在listen域下.