centos7.2下haproxy1.7的使用與配置php
haproxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。css
1.下載haproxy1.7
http://pkgs.fedoraproject.org/repo/pkgs/haproxy/html
2.安裝haproxy
查看內核版本前端
uname -rnode
解壓haproxy,並安裝linux
tar xf haproxy-1.7.2.tar.gz
cd haproxy-1.7.2
make TARGET=linux2628 PREFIX=/data/haproxy
make install PREFIX=/data/haproxyandroid
安裝成功後,查看版本後端
/data/haproxy/sbin/haproxy -vcentos
複製haproxy文件到/usr/sbin下
由於下面的haproxy.init啓動腳本默認會去/usr/sbin下找,固然你也能夠修改,不過比較麻煩。cookie
cp /data/haproxy/sbin/haproxy /usr/sbin/
複製haproxy腳本,到/etc/init.d下
cp ./examples/haproxy.init /etc/init.d/haproxy
賦予權限
chmod 755 /etc/init.d/haproxy
建立系統帳號
useradd -r haproxy
建立配置文件
mkdir /etc/haproxy
vi /etc/haproxy/haproxy.cfg
#全局配置
global
#設置日誌
log 127.0.0.1 local3 info
chroot /data/haproxy
#用戶與用戶組
user haproxy
group haproxy
#守護進程啓動
daemon
#最大鏈接數
maxconn 4000
#默認配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#前端配置,http_front名稱可自定義
frontend http_front
bind *:80
#haproxy的狀態管理頁面,經過/haproxy?stats來訪問
stats uri /haproxy?stats
default_backend http_back
#後端配置,http_back名稱可自定義
backend http_back
#負載均衡方式
#source 根據請求源IP
#static-rr 根據權重
#leastconn 最少鏈接者先處理
#uri 根據請求的uri
#url_param 根據請求的url參數
#rdp-cookie 據據cookie(name)來鎖定並哈希每一次請求
#hdr(name) 根據HTTP請求頭來鎖定每一次HTTP請求
#roundrobin 輪詢方式
balance roundrobin
#設置健康檢查頁面
option httpchk GET /index.html
#傳遞客戶端真實IP
option forwardfor header X-Forwarded-For
# rise 3 檢測多少次才認爲是正常的 # fall 3 失敗多少次才認爲是不可用的 # weight 30 權重 server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30 server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
打開rsyslog配置
vi /etc/rsyslog.conf
去掉下面兩行前面的#號
$ModLoad imudp
$UDPServerRun 514
並添加下面一行
local3.* /var/log/haproxy.log
重啓rsyslog
systemctl restart rsyslog
啓動haproxy
service haproxy start
三、haproxy的acl規則
frontend http_front bind *:80 stats uri /haproxy?stats #建立一個acl,is_http_back2是acl的名稱,可自定義,用於判斷主機名是否爲 www.back2.com acl is_http_back2 hdr_end(host) www.back2.com #經過正則判斷主機名中是否爲bbs.back.com或forum.back.com acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com) #判斷ua是否爲android acl is_ua_android hdr_reg(User-Agent) -i android #判斷主機名開頭是否爲img.或css.或js. acl is_host_static hdr_beg(host) -i img. css. js. #判斷url路徑中是否有/bbs acl is_path_bbs path_beg -i /bbs #判斷url文件結尾 acl is_php path_end -i .php #經過正則判斷url中結尾以 acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$ #效果同上 acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif #若是主機名是www.back2.com那麼就使用後端http_back2 use_backend http_back2 if is_http_back2 #默認使用的後端 default_backend http_back backend http_back balance roundrobin option httpchk GET /index.html option forwardfor header X-Forwarded-For server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30 backend http_back2 balance roundrobin option httpchk GET /index.html option forwardfor header X-Forwarded-For server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30