haproxy 下載
安裝參考: https://blog.csdn.net/keil_wang/article/details/89712380
tar xzvf haproxy-1.8.13.tar.gz
cd haproxy-1.8.13/
make TARGET=linux31 //這裏用uname -r查看系統內核版本。centos6.x使用linux26,centos7.x使用linux31
make install PREFIX=/usr/local/haproxy
mkdir /usr/local/haproxy/conf
cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
啓動:
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
配置文件 haproxy.cfg 配置反向代理
global
maxconn 20000
ulimit-n 16384
log 127.0.0.1 local0
uid 200
gid 200
chroot /var/empty
nbproc 4
daemon
#---------------------------------------------------------------------
# 默認配置
#---------------------------------------------------------------------
defaults
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global #採用全局定義的日誌
option httplog #日誌類別,採用httplog
option dontlognull #不記錄健康檢查日誌信息
retries 3 #3次連接失敗就認爲是服務器不可用,也可以通過後面設置
option forwardfor #如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip
#option httpclose #每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現,關閉keep-alive
#option redispatch #當serverId對應的服務器掛掉後,強制定向到其他健康的服務器,以後將不支持
option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
maxconn 6000 #默認的最大連接數
timeout connect 50000ms #連接超時
timeout client 300000ms #客戶端超時
timeout server 300000ms #服務器超時
#timeout check 2000 #心跳檢測超時
#timeout http-keep-alive 10s #默認持久連接超時時間
#timeout http-request 10s #默認http請求超時時間
#timeout queue 1m #默認隊列超時時間
balance roundrobin #設置默認負載均衡方式,輪詢方式,類似於nginx的ip_hash
# 保持長連接
option http-keep-alive
option http-server-close
timeout http-keep-alive 650s
timeout client 30s
frontend test-proxy
#bind 192.168.200.10:8080
# 這裏建議使用bind *:80的方式,要不然做集羣高可用的時候有問題,vip切換到其他機器就不能訪問了。
bind *:80
mode http
log global
option httplog
option dontlognull
option nolinger
option http_proxy
maxconn 8000
timeout client 30s
# layer3: Valid users
#acl allow_host src 192.168.200.150/32
#http-request deny if !allow_host
# layer7: prevent private network relaying
#acl forbidden_dst url_ip 192.168.0.0/24
#acl forbidden_dst url_ip 172.16.0.0/12
#acl forbidden_dst url_ip 10.0.0.0/8
#配置第一個項目請求 ,比如將 http://localhost/t1/** 都代理 project1-server 服務
#acl project1-server path_beg -i /t1/
#use_backend project1-server if project1-server
# 這種方式必須開啓長連接
acl test path_beg -i /test/
use_backend test if test
# 完全代理 ,即將 http://localhost/** 都 代理 test_all 的服務器
#use_backend test_all
#http-request deny if forbidden_dst
default_backend test-proxy-srv
#當以域名+/project1請求時轉發到下面地址,內網ip+端口+項目名(項目名一個時可以不寫)
# check inter 10s 請不要隨便加上這個配置,特別是 代理NGINX的時候,或者不支持心跳檢查的服務,否則代理出錯
backend project1-server
mode http
option forwardfor
server wget 192.168.10.4:80/t1 check inter 10s
backend test
mode http
#option forwardfor
server test1 192.168.10.4:8085
backend test_all
mode http
#option forwardfor # 讓 代理的服務器能夠識別代理的機器IP
server n1 192.168.10.4:8085
backend test-proxy-srv
mode http
timeout connect 5s
timeout server 5s
retries 2
option nolinger
option http_proxy
# layer7: Only GET method is valid
acl valid_method method GET
http-request deny if !valid_method
# layer7: protect bad reply
http-response deny if { res.hdr(content-type) audio/mp3 }
參考
https://blog.csdn.net/keil_wang/article/details/89712380
https://vegetable-chicken.blog.csdn.net/article/details/107717290
https://my.oschina.net/gongfuxiang/blog/4545141
https://my.oschina.net/u/4367553/blog/3546402
haproxy 保持連接: https://blog.51cto.com/fengwan/1775083
https://blog.51cto.com/tianshili/1841003
https://blog.51cto.com/fengwan/1775083
https://blog.csdn.net/boyce_avenue/article/details/80487161
https://blog.csdn.net/weixin_33984032/article/details/92179538