Haproxy 安裝及配置
docker部署HAproxy:
mkdir -p /opt/haproxy
docker run -d --restart=always -p 6443:6443 -p 9999:9999 --name haproxy -v /opt/haproxy:/usr/local/etc/haproxy:ro haproxy:2.1
docker run -d --restart=always --net=host --name haproxy -v /etc/localtime:/etc/localtime -v /opt/haproxy:/usr/local/etc/haproxy:ro haproxy:2.1
cat << EOF > /opt/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /usr/local/etc/haproxy #鎖定運行目錄
pidfile /var/run/haproxy.pid
maxconn 4000 #每個haproxy進程的最大併發連接數,要考慮到ulimit -n的大小限制
user root #運行haproxy的用戶
group root #運行haproxy的用戶組
daemon
nbproc 2 #開啓的haproxy進程數,與CPU保持一致
#nbthread 4 #指定每個haproxy進程開啓的線程數,默認爲每個進程一個線程
#cpu-map 1 0 #綁定haproxy 進程至指定CPU
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
#maxsslconn 100000 #SSL每個haproxy進程ssl最大連接數
maxconnrate 100000 #每個進程每秒最大連接數
spread-checks 3 #後端server狀態check隨機提前或延遲百分比時間,建議2-5(20%-50%)之間
defaults
mode tcp #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global
retries 3
timeout connect 10s #連接超時
timeout client 1m #客戶端超時
timeout server 1m #服務器超時
########統計頁面配置########
listen admin_status
bind 0.0.0.0:9999 #監聽端口
mode http #http的7層模式
option httplog #採用http日誌格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #統計頁面自動刷新時間
stats uri /status #統計頁面url
stats realm Haproxy \ statistic #統計頁面密碼框上提示文本
stats auth admin:HA@2020 #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息
frontend kube-apiserver
bind *:6443 # 指定前端端口
mode tcp
default_backend master
backend master # 指定後端機器及端口,負載方式爲輪詢
balance roundrobin
mode tcp
server k8s-master01 192.168.0.121:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
server k8s-master02 192.168.0.122:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
server k8s-master03 192.168.0.123:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
EOF
HAProxy簡介
官網:http://www.haproxy.com
HAProxy提供高可用性、負載均衡以及基於TCP和HTTP的應用代理,支持虛擬主機,它是免費、快速並且可靠的一種負載均衡解決方案。適合處理高負載 站點的七層數據請求。類似的代理服務可以屏蔽內部真實服務器,防止內部服務器遭受攻擊。
HAProxy特點和優點:
1.支持原聲SSL,同時支持客戶端和服務器的SSL.
2.支持IPv6和UNIX套字節(sockets)
3.支持HTTP Keep-Alive
4.支持HTTP/1.1壓縮,節省寬帶
5.支持優化健康檢測機制(SSL、scripted TCP、check agent...)
6.支持7層負載均衡。
7.可靠性和穩定性非常好。
8.併發連接40000-50000個,單位時間處理最大請求20000個,最大數據處理10Gbps.
9.支持8種負載均衡算法,同時支持session保持。
10.支持虛擬主機。
11.支持連接拒絕、全透明代理。
12.擁有服務器狀態監控頁面。
13.支持ACL.
HAProxy爲了讓同一客戶端訪問服務器可以保持會話。有三種解決方法:客戶端IP、Cookie以及Session
1.HAProxy通過客戶端IP進行Hash計算並保存,以此確保當相同IP訪問代理服務器可以轉發給固定的真實服務器。
2.HAProxy依靠真實服務器發送客戶端的Cookie信息進行會話保持。
3.HAProxy將保存真實服務器的Session以及服務器標識,實現會話保持。
(HAProxy只要求後端服務器能夠在網絡聯通,也沒有像LVS那樣繁瑣的ARP配置)
HAProxy的balance8種負載均衡算法:
1.roundrobin : 基於權重輪循。
2.static-rr : 基於權重輪循。靜態算法,運行時改變無法生效
3.source : 基於請求源IP的算法。對請求的源IP進行hash運算,然後將結果與後端服務器的權重總數想除後轉發至某臺匹配服務器。使同一IP客戶端請求始終被轉發到某特定的後端服務器。
4.leastconn : 最小連接。(適合數據庫負載均衡,不適合會話短的環境)
5.uri : 對部分或整體URI進行hash運算,再與服務器的總權重想除,最後轉發到匹配後端。
6.uri_param : 根據URL路徑中參數進行轉發,保證在後端服務器數量不變的情況下,同一用戶請求分發到同一機器。
7.hdr(<name>) : 根據http頭轉發,如果不存在http頭。則使用簡單輪循。
HAProxy主要工作模式
1.tcp模式:該模式下,在客戶端和服務器之間將建立一個全雙工的連接,且不會對7層的報文做任何處理的簡單模式。此模式默認,通常用於SSL、SSH、SMTP應用。
2.http模式(一般使用):該模式下,客戶端請求在轉發給後端服務器之前會被深度分析,所有不與RFC格式兼容的請求都會被拒絕。
二、Haproxy安裝
1、編譯安裝過程
(1) 準備源碼包,可到官網下載 http://www.haproxy.org
[root@centos7 ~]# ll haproxy-1.8.20.tar.gz
-rw-r--r-- 1 root root 2083917 Jan 10 20:39 haproxy-1.8.20.tar.gz
(2) 安裝相應依賴包
[root@centos7 ~]# yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel systemd-devel
(3) 解壓源碼包,並進行編譯
[root@centos7 ~]# tar -zxvf haproxy-1.8.20.tar.gz
[root@centos7 ~]# cd haproxy-1.8.20/
[root@centos7 haproxy-1.8.20]# make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
[root@centos7 haproxy-1.8.20]# make install PREFIX=/usr/local/haproxy
[root@centos7 haproxy-1.8.20]# cp haproxy /usr/sbin/
(4) 創建啓動腳本
[root@centos7 haproxy-1.8.20]# vim /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
(5) 創建用戶與相關目錄以及配置文件
[root@centos7 haproxy-1.8.20]# useradd -r -s /sbin/nologin haproxy
[root@centos7 haproxy-1.8.20]# mkdir /etc/haproxy
[root@centos7 haproxy-1.8.20]# mkdir /usr/local/haproxy/run
[root@centos7 haproxy-1.8.20]# mkdir /var/lib/haproxy
[root@centos7 haproxy-1.8.20]# chown -R haproxy:haproxy /var/lib/haproxy/
[root@centos7 haproxy-1.8.20]# vim /etc/haproxy/haproxy.cfg
配置文件
[root@centos7 haproxy-1.8.20]# cat /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
#uid 981
#gid 981
user haproxy
group haproxy
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:q1w2e3r4ys
listen web_port
bind 0.0.0.0:80
mode http
log global
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
(6) 啓動haproxy服務
[root@centos7 haproxy-1.8.20]# systemctl start haproxy
[root@centos7 haproxy-1.8.20]# ps -ef|grep haproxy
root 58693 1 0 23:29 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
haproxy 58697 58693 0 23:29 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
root 58708 6403 0 23:29 pts/0 00:00:00 grep --color=auto haproxy
三、Haproxy配置項解析
1、global 全局配置段
• chroot #鎖定運行目錄
• deamon #以守護進程運行
• stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #socket文件
• user, group, uid, gid #運行haproxy的用戶身份
• nbproc #開啓的haproxy進程數,與CPU保持一致
• nbthread #指定每個haproxy進程開啓的線程數,默認爲每個進程一個線程
• cpu-map 1 0 #綁定haproxy 進程至指定CPU
• maxconn #每個haproxy進程的最大併發連接數
• maxsslconn #SSL每個haproxy進程ssl最大連接數
• maxconnrate #每個進程每秒最大連接數
• spread-checks #後端server狀態check隨機提前或延遲百分比時間,建議2-5(20%-50%)之間
• pidfile #指定pid文件路徑
• log 127.0.0.1 local3 info #定義全局的syslog服務器;最多可以定義兩個
2、proxies 代理配置段
defaults [<name>] #默認配置項,針對以下的frontend、backend和listen生效,可以多個name
• option redispatch #當server Id對應的服務器掛掉後,強制定向到其他健康的服務器
• option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
• option http-keep-alive 60 #開啓會話保持
• option forwardfor #開啓IP透傳
• mode http #默認工作類型
• timeout connect 60s #轉發客戶端請求到後端server的最長連接時間(TCP之前)
• timeout server 600s #轉發客戶端請求到後端服務端的超時超時時長(TCP之後)
• timeout client 600s #與客戶端的最長空閒時間
• timeout http-keep-alive 120s #session 會話保持超時時間,範圍內會轉發到相同的後端服務器
• timeout check 5s #對後端服務器的檢測超時時間,一般在服務器組配置
frontend <name> #前端servername,類似於Nginx的一個虛擬主機server
• bind [<address>]:<port_range> [, ...] [param*] #指定HAProxy的監聽地址,可以是IPV4或IPV6,可以同時監聽多個IP或端口,可同時用於listen字段中
• mode http/tcp #指定負載協議類型
• use_backend backend_name #調用的後端服務器組名稱
示例:
frontend WEB_PORT
bind 192.168.27.7:80
mode tcp
use_backend backend_name
backend <name> #後端服務器組,等於Nginx的upstream
• mode http/tcp #指定負載協議類型
• option #配置選項,可加httpchk,smtpchk, mysql-check, pgsql-check,ssl-hello-chk等方法,可用於實現更多應用層檢測功能
• server #定義後端real server,後可接 check 對指定real進行健康狀態檢查,默認不開啓
check #對指定real server進行健康狀態檢查,默認不開啓
• addr IP #可指定的健康狀態監測IP
• port num #指定的健康狀態監測端口
• inter num #健康狀態檢查間隔時間,默認2000 ms
• fall num #後端服務器失效檢查次數,默認爲3
• rise num #後端服務器從下線恢復檢查次數,默認爲2
• weight #默認爲1,最大值爲256,0表示不參與負載均衡
• backup #將後端服務器標記爲備份狀態
• disabled #將後端服務器標記爲不可用狀態
• redirect prefix http://www.xxx.com/ #將請求臨時重定向至其它URL,只適用於http模式
• mbacklog axconn <maxconn> #當前後端server的最大併發連接數
• <backlog> #當server的連接數達到上限後的後援隊列長度
frontend WEB_PORT_80
bind 192.168.27.7:80
mode http
use_backend web_prot_http_nodes
backend web_prot_http_nodes
mode http
option forwardfor
server web1 192.168.27.17:8080 weight 1 check inter 3000 fall 3 rise 5
server web2 192.168.27.27:8080 weight 1 check inter 3000 fall 3 rise 5
server web2 192.168.27.37:8080 check inter 3000 fall 3 rise 5 backup
listen <name> #將 frontend 和 backend 合併在一起配置
listen WEB_PORT_80
bind 192.168.27.7:80
mode http
option forwardfor
server web1 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server web2 192.168.27.27:8080 check inter 3000 fall 3 rise 5
注:name字段只能使用 " - "、" _ "、" . "、" : ",並且嚴格區分大小寫。
四、Haproxy的調度算法
通過 balance 指明對後端服務器的調度算法,配置在listen或backend。調度算法有以下幾種:
1、first
根據服務器在列表中的位置,自上而下進行調度,但是其只會當第一臺服務器的連接數達到上限,新請求才會分配給下一臺服務,因此會忽略服務器的權重設置;
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #可以爲tcp或http
balance first
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
2、static-rr
基於權重的輪詢靜態調度算法,不支持權重的運行時調整及後端服務器慢啓動,其後端主機數量沒有限制;
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #可以爲tcp或http
balance static-rr
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
3、roundrobin
基於權重的輪詢動態調度算法,支持權重的運行時調整,不等於lvs 的 rr,支持慢啓動即新加的服務器會逐漸增加轉發數,每個後端backend中最多支持4095個server,此爲默認調度算法;
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #可以爲tcp或http
balance rountrobin
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
4、leastconn
加權的最少連接動態調度算法,支持權重的運行時調整和慢啓動,即當前後端服務器連接最少的優先調度,比較適合長連接的場景使用,比如MySQL等場景;
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #可以爲tcp或http
balance leastconn
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
5、source
源地址hash,基於用戶源地址hash並將請求轉發到後端服務器,默認爲靜態即取模方式,但是可以通過hash-type支持的選項更改,後續同一個源地址請求將被轉發至同一個後端web服務器,比較適用於session保持/緩存業務等場景;
• map-based:取模法,基於服務器權重的hash數組取模,該hash是靜態的即不支持在線調整權重,不支持慢啓動,其對後端服務器調度均衡,缺點是當服務器的總權重發生變化時,即有服務器上線或下線,都會因權重發生變化而導致調度結果整體改變;
• consistent:一致性哈希,該hash是動態的,支持在線調整權重,支持慢啓動,優點在於當服務器的總權重發生變化時,對調度結果影響是局部的,不會引起大的變動;
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #可以爲tcp或http
balance source
hash-type consistent
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
6、uri
基於對用戶請求的uri做hash並將請求轉發到後端指定服務器;
• map-based:取模法
• consistent:一致性哈希
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #只能是http
balance uri
hash-type consistent
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
7、url_param
對用戶請求的url中的<params>部分中的參數name作hash計算,並由服務器總權重相除以後派發至某挑出的服務器;通常用於追蹤用戶,以確保來自同一個用戶的請求始終發往同一個Backend Server;
假設url=http://www.xx.com/index.php?k1=v1&k2=v2,則url_param="k1=v1&k2=v2";
• map-based:取模法
• consistent:一致性哈希
#假設url=http://192.168.27.7/index.html?name=tom
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #只能是http
balance url_param
hash-type consistent
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
8、hdr
針對用戶每個http頭部(header)請求中的指定信息做hash,此處由<name>指定的http首部將會被取出並做hash計算,然後由服務器總權重相除以後派發至某挑出的服務器,假如無有效的值,則會被輪詢調度;
• map-based:取模法
• consistent:一致性哈希
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http #只能是http
balance hdr(User_Agent)
hash-type consistent
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
9、rdp-cookie
對遠程桌面的負載,使用cookie保持會話;
• map-based:取模法
• consistent:一致性哈希
listen RDP
bind 192.168.27.7:3389
mode tcp #只能是tcp
balance rdp_cookie
hash-type consistent
option forwardfor
server 192.168.27.17 192.168.27.17:3389 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:3389 check inter 3000 fall 3 rise 5
五、部分配置實例
1、基於cookie實現的session保持
cookie <value>:爲當前server指定cookie值,實現基於cookie的會話黏性
cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
<name>:cookie名稱,用於實現持久連接
rewrite:重寫
insert:插入
prefix:前綴
nocache:當client和hapoxy之間有緩存時,不緩存cookie
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http
cookie SERVER-COOKIE insert indirect nocache
option forwardfor
server 192.168.27.17 192.168.27.17:8080 cookie web1 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 cookie web2 check inter 3000 fall 3 rise 5
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 refresh 5s #定義頁面自動刷新間隔時間
• stats admin { if | unless } <cond> #啓用stats page中的管理功能
listen stats
bind 192.168.27.7:9009
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
3、Haproxy日誌配置
在haproxy配置文件default配置項定義:
log 127.0.0.1 local{1-7} info #基於syslog記錄日誌到指定設備,級別有(err、
warning、info、debug)
配置rsyslog:
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
配置HAProxy:
listen web_port
bind 127.0.0.1:80
mode http
log global
option tcplog #允許記錄tcp連接的狀態和時間
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
重啓rsyslog服務與haproxy服務
4、三種後端服務器的監測
(1) 基於四層傳輸端口監測
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http
log global
option forwardfor
server 192.168.27.17 192.168.27.17:8080 check port 9000 addr 172.168.27.17 inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check port 9000 addr 172.168.27.27 inter 3000 fall 3 rise 5
(2) 基於指定URI 做狀態監測
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http
log global
option forwardfor
option httpchk GET /wp-includes/js/jquery/jquery.js?ver=1.12.4 HTTP/1.0 #基於指定URL
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
(3) 基於指定URI的request請求頭部內容做狀態監測
listen web_prot_http_nodes
bind 192.168.27.7:80
mode http
log global
option forwardfor
option httpchk HEAD /wp-includes/js/jquery/jquery.js?ver=1.12.4 HTTP/1.0\r\nHost:\ 192.168.27.7 #通過request獲取的頭部信息進行匹配進行健康檢測
server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
5、自定義錯誤頁面
• errorfile 500 /usr/local/haproxy/html/500.html #自定義錯誤頁面跳轉
• errorloc 503 http://192.168.7.103/error_page/503.html #自定義錯誤頁面跳轉
6、基於acl+文件後綴實現動靜分離
listen web_port
bind 192.168.27.7:80
mode http
acl php_server path_end -i .php
use_backend php_server_host if php_server
acl image_server path_end -i .jpg .png .jpeg .gif
use_backend image_server_host if image_server
default_backend default_host
backend default_host
mode http
server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5
backend php_server_host
mode http
server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5
backend image_server_host
mode http
server web1 192.168.27.37:8080 check inter 2000 fall 3 rise 5
7、acl匹配訪問路徑
listen web_port
bind 192.168.27.7:80
mode http
acl static_path path_beg -i /static /images /javascript
use_backend static_path_host if static_path
default_backend default_host
backend default_host
mode http
server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5
backend static_path_host
mode http
server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5
8、基於http策略的訪問控制
listen web_port
bind 192.168.27.7:80
mode http
acl badguy_deny src 192.168.4.1
http-request deny if badguy_deny
http-request allow
default_backend default_host
backend default_host
mode http
server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5
backend static_path_host
mode http
server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5
9、https的配置
#web server http
frontend web_server-http
bind 192.168.27.7:80
mode http
redirect scheme https if !{ ssl_fc } #把80端口的請求重向定443
use_backend web_host
#web server https
frontend web_server-https
bind 192.168.27.7:443 ssl crt /usr/local/haproxy/certs/haproxy.pem #crt後的證書文件爲PEM格式,且同時包含證書和所有私鑰
mode http
use_backend web_host
backend web_host
mode http
http-request set-header X-Forwarded-Port %[dst_port] #向後端傳遞用戶請求的端口
http-request add-header X-Forwarded-Proto https if { ssl_fc } #向後端傳遞用戶請求的協議
server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5
server web2 192.168.27.27:8080 check inter 2000 fall 3 rise 5
# mkdir /usr/local/haproxy/certs
# cd /usr/local/haproxy/certs
# openssl genrsa -out haproxy.key 2048
# openssl req -new -x509 -key haproxy.key -out haproxy.crt -subj "/CN=www.xxx.com"
# cat haproxy.key haproxy.crt > haproxy.pem #將私鑰和證書導入到一個文件中
# openssl x509 -in haproxy.pem -noout -text #查看證書
10、Haproxy後端服務器的動態上下線
# yum install socat
# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
# echo "get weight web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock
# echo "disable server web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock
# echo "enable server web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock