Haproxy 安裝與配置

一 Haproxy簡介javascript

1、HAProxy簡介


HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在時下的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中, 同時能夠保護你的web服務器不被暴露到網絡上。

HAProxy實現了一種事件驅動、單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶端(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。

————百度百科

Big O: 評判數據結構複雜度
    O(1): 
    O(logN): 紅黑樹
    O(n)
    O(n^2)
    O(2^n)


haproxy: 彈性二叉樹
    數據結構:

Remote Desktop Protocol
    Windows: 3389


HAProxy是免費、極速且可靠的用於爲TCP和基於HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤爲適用於高負載且須要持久鏈接或7層處理機制的web站點。

HAProxy目前主要有兩個版本:

1.4——提供較好的彈性:衍生於1.2版本,並提供了額外的新特性,其中大多數是期待已久的。
  客戶端側的長鏈接(client-side keep-alive)
  TCP加速(TCP speedups)
  響應池(response buffering)
  RDP協議
  基於源的粘性(source-based stickiness)
  更好的統計數據接口(a much better stats interfaces)
  更詳細的健康狀態檢測機制(more verbose health checks)
  基於流量的健康評估機制(traffic-based health)
  支持HTTP認證
  服務器管理命令行接口(server management from the CLI)
  基於ACL的持久性(ACL-based persistence)
  日誌分析器

1.3——內容交換和超強負載:衍生於1.2版本,並提供了額外的新特性。
  內容交換(content switching):基於任何請求標準挑選服務器池;
  ACL:編寫內容交換規則;
  負載均衡算法(load-balancing algorithms):更多的算法支持;
  內容探測(content inspection):阻止非受權協議;
  透明代理(transparent proxy):在Linux系統上容許使用客戶端IP直接連入服務器;
  內核TCP拼接(kernel TCP splicing):無copy方式在客戶端和服務端之間轉發數據以實現數G級別的數據速率;
  分層設計(layered design):分別實現套接字、TCP、HTTP處理以提供更好的健壯性、更快的處理機制及便捷的演進能力;
  快速、公平調度器(fast and fair scheduler):爲某些任務指定優先級可實現理好的QoS;
  會話速率限制(session rate limiting):適用於託管環境;


支持的平臺及OS:
  x8六、x86_6四、Alpha、SPARC、MIPS及PARISC平臺上的Linux 2.4;
  x8六、x86_6四、ARM (ixp425)及PPC64平臺上的Linux2.6;
  UltraSPARC 2和3上的Sloaris 8/9;
  Opteron和UltraSPARC平臺上的Solaris 10;
  x86平臺上的FreeBSD 4.1-8;
  i386, amd64, macppc, alpha, sparc64和VAX平臺上的OpenBSD 3.1-current;

若要得到最高性能,須要在Linux 2.6或打了epoll補丁的Linux 2.4上運行haproxy 1.2.5以上的版本。haproxy 1.1l默認使用的polling系統爲select(),其處理的文件數達數千個時性能便會急劇降低。1.2和1.3版本默認的爲poll(),在有些操做系統上可會也會有性能方面的問題,但在Solaris上表現至關不錯。HAProxy 1.3在Linux 2.6及打了epoll補丁的Linux 2.4上默認使用epoll,在FreeBSD上使用kqueue,這兩種機制在任何負載上都能提供恆定的性能表現。

在較新版本的Linux 2.6(>=2.6.27.19)上,HAProxy還可以使用splice()系統調用在接口間無複製地轉發任何數據,這甚至能夠達到10Gbps的性能。

基於以上事實,在x86或x86_64平臺上,要獲取最好性能的負載均衡器,建議按順序考慮如下方案。
  Linux 2.6.32及以後版本上運行HAProxy 1.4;
  打了epoll補丁的Linux 2.4上運行HAProxy 1.4;
  FreeBSD上運行HAProxy 1.4;
  Solaris 10上運行HAProxy 1.4;


性能

HAProxy藉助於OS上幾種常見的技術來實現性能的最大化。
  單進程、事件驅動模型顯著下降了上下文切換的開銷及內存佔用。
  O(1)事件檢查器(event checker)容許其在高併發鏈接中對任何鏈接的任何事件實現即時探測。
  在任何可用的狀況下,單緩衝(single buffering)機制能以不復制任何數據的方式完成讀寫操做,這會節約大量的CPU時鐘週期及內存帶寬;
  藉助於Linux 2.6 (>= 2.6.27.19)上的splice()系統調用,HAProxy能夠實現零複製轉發(Zero-copy forwarding),在Linux 3.5及以上的OS中還能夠實現零複製啓動(zero-starting);
   內存分配器在固定大小的內存池中可實現即時內存分配,這可以顯著減小建立一個會話的時長;
  樹型存儲:側重於使用做者多年前開發的彈性二叉樹,實現了以O(log(N))的低開銷來保持計時器命令、保持運行隊列命令及管理輪詢及最少鏈接隊列;
  優化的HTTP首部分析:優化的首部分析功能避免了在HTTP首部分析過程當中重讀任何內存區域;
  精心地下降了昂貴的系統調用,大部分工做都在用戶空間完成,如時間讀取、緩衝聚合及文件描述符的啓用和禁用等;

全部的這些細微之處的優化實現了在中等規模負載之上依然有着至關低的CPU負載,甚至於在很是高的負載場景中,5%的用戶空間佔用率和95%的系統空間佔用率也是很是廣泛的現象,這意味着HAProxy進程消耗比系統空間消耗低20倍以上。所以,對OS進行性能調優是很是重要的。即便用戶空間的佔用率提升一倍,其CPU佔用率也僅爲10%,這也解釋了爲什麼7層處理對性能影響有限這一現象。由此,在高端系統上HAProxy的7層性能可輕易超過硬件負載均衡設備。

在生產環境中,在7層處理上使用HAProxy做爲昂貴的高端硬件負載均衡設備故障故障時的緊急解決方案也時長可見。硬件負載均衡設備在「報文」級別處理請求,這在支持跨報文請求(request across multiple packets)有着較高的難度,而且它們不緩衝任何數據,所以有着較長的響應時間。對應地,軟件負載均衡設備使用TCP緩衝,可創建極長的請求,且有着較大的響應時間。

能夠從三個因素來評估負載均衡器的性能:
  會話率
  會話併發能力
  數據率

二. Haproxy 安裝配置css

haproxy 配置主要分爲兩大部分,4個虛擬節點
[global]:全局配置段,進程級別與進程管理及安全相關及性能調整相關的參數。
[proxy]
  - defaults:配置默認參數,這些參數能夠被用到frontend,backend,Listen段
  - frontend:接受請求的前端虛擬節點,定義一些和客戶端請求相關的參數,可使用use_backend調用backend節點集羣
  - backend:後端服務集羣的配置,定義一些和後端真正提供服務的主機相關的一些參數
  - listen:frontend和backend的結合體,不能使用use_backend 調用backend節點集羣

1. 下載並編譯安裝
  shell>wget -c http://www.haproxy.org/download/1.6/src/haproxy-1.6.9.tar.gz -P /usr/local/src/
  shell>cd /usr/local/src
  shell>tar xfv haproxy-1.6.9.tar.gz
  
  shell>mkdir /usr/local/haproxy
  shell>cd haproxy-1.6.9
  shell>vim README
  #執行make的時候參數介紹:TARGET,ARCH,PREFIX
   TARGET:內核版本控制

    - linux22 for Linux 2.2
    - linux24 for Linux 2.4 and above (default)
    - linux24e for Linux 2.4 with support for a working epoll (> 0.21)
    - linux26 for Linux 2.6 and above
    - linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
    html

    ARCH:cpu架構前端

    i386,i486,i586,i686,x86_64java

     shell>yum install gcc openssl-devel pcre-devel zlib-devel -y # 安裝依賴包mysql

   shell>make TARGET=linux26 ARCH=x86_x64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy   # 須要根據本身的操做系統環境自行修改
  shell>make install PREFIX=/usr/local/haproxy

2. 提供配置文件
  默認源碼安裝haproxy不提供配置文件,但在其解壓目錄examples下會提供相關haproxy的實例配置,但有的版本的源碼haproxy實例配置不是很全面,最笨的
  辦法是使用yum安裝rpm包格式的haproxy,而後複製其配置文件件做爲參考,而後再將其卸載。此處提供一個簡單框架的haproxy配置模板實例,詳細的配置請參考官網
  http://cbonte.github.io/haproxy-dconv/1.6/configuration.html

  shell>cp -ra /usr/local/src/haproxy-1.6.9/examples /usr/local/haproxy ## 複製解壓目錄下的examples目錄到安裝目錄下,之後可能會用到
  shell>mkdir /usr/local/haproxy/conf
  
  haproxy配置文件及簡單參數說明:
  
########################[全局配置]##########################
global
    # 日誌輸出配置,全部日誌都記錄在本機,經過local3輸出
    log 127.0.0.1     local3 

    # 設定每一個haproxy進程所接受的最大併發鏈接數,須要參考ulimit -n
    maxconn 4096
    
    # ulimit 文件描述符數量
    #ulimit-n 819200

    #chroot /usr/share/haproxy

    # 運行haproxy用戶
    user haproxy
    
    # 運行haproxy用戶組
    group haproxy

    # 之後臺形式運行haproxy
    daemon

    # 設置進程數量
    nbproc 1

    # 設置haproxy進程的pid文件路徑
    pidfile /usr/local/haproxy/var/haproxy.pid
    
    # haproxy 調試級別,建議只在開啓單進程的時候調試
    #debug
    #quiet

####################[默認配置]################################
defaults
    # 日誌使用全局配置
    log    global

    # haproxy工做模式{tcp|http|health},tcp4層,http7層,health只返回OK
    mode    http

    # 日誌類別,採用httplog
    option    httplog
    
    # 不記錄請求報文包體數據爲空的請求到日誌,好比健康檢查,減小寫磁盤IO
    option    dontlognull
    
    # 三次鏈接失敗就認爲服務器不可達,也能夠經過後面設置
    retries    3
    
    # 容許在發往服務器的請求首部中插入「X-Forwarded-For」首部,用於後端主機記錄真實請求的客戶端ip
    option    forwardfor  except 127.0.0.0/8

    # 每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能經過模擬實現
    option    httpclose
    
    # 當server id對應的服務器掛掉後,強制定向到其餘健康的後端服務器,之後將不支持
    option    redispatch

    # 當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
    option    abortonclose

    # 默認的最大鏈接數
    maxconn    4096

    # 鏈接超時
    timeout connect    5000ms
    
    # 客戶端請求超時
    timeout    client  30000ms
    
    # 服務端響應超時
    timeout server  30000ms

    # 心跳檢測超時
    timeout check 2000
    
    # 持久鏈接超時時間
    timeout http-keep-alive  10s
    
    # http請求超時時間
    timeout http-request 10s

    # 默認隊列超時時間
    timeout queue    1m

    # 設置默認負載均衡算法{roundrobin|source|leastconn...}
    balance    roundrobin

###########################[統計頁面]############################
listen admin_stats
    # 設置統計頁面監聽的套接字,listen虛擬節點爲frontend和backend的專有通道
    bind 0.0.0.0:10800
    
    # 設置統計頁面工做模式
    mode http

    # 啓用狀態頁面功能
    stats enable

    # 採用http日誌格式
    option    httplog
    
    # 是否開啓錯誤日誌並記錄
    #log 127.0.0.1 local err

    # 設置訪問統計頁面的最大鏈接數
    maxconn    10
    
    # 設置統計頁面的自動刷新時間
    stats refresh    30s
    
    # 訪問統計頁面的url
    stats    uri   /stats

    # 登陸統計頁面時的提示信息
    stats    realm  DongPing\ Haproxy
    
    # 設置統計頁面的用戶認證,能夠設置多個用戶名
    stats auth admin:admin

    # 隱藏統計頁面上Haproxy的版本信息
    stats    hide-version
    
    # 設置haproxy管理頁面能夠執行一些特權動做,好比下線後端主機
    stats    admin   if  TRUE

##########################[設置haproxy 錯誤頁面]##########################

errorfile 403   /usr/local/haproxy/errorfiles/403.http
errorfile 500   /usr/local/haproxy/errorfiles/500.http
errorfile 502   /usr/local/haproxy/errorfiles/502.http
errorfile 503   /usr/local/haproxy/errorfiles/503.http
errorfile 504   /usr/local/haproxy/errorfiles/504.http
 
#########################[Frontend 前端配置]##############################
frontend http-proxy
    # 定義使用的套接字
    bind    *:80

    # 抓取請求報文首部字段爲Host,Referer的值到haproxy日誌中
    capture request header Host len 20
    capture request header Referer len 60
    capture request header User-agent len 60
    capture request header X-Forward-For len 60
    
    # 定義一個acl規則,匹配以/{static|images|javascript|stylesheets}開頭的靜態資源
    acl url_static    path_beg -i /static /images /javascript    /stylesheets

    # 定義一個acl規則,匹配以\.{jpg|jpeg|gif|png|css|js}結尾的靜態資源
    acl url_static    path_end -i .jpg .jpeg .gif .png .css .js

    # 若是被url_static這條acl規則匹配由後端集羣static_servers進行分發 
    use_backend static_servers if url_static

    # 定義請求不匹配全部規則時默認轉發到的後端主機
    default_backend    dynamic_servers

##########################[backend 後端配置]###########################################
# 定義一組動態資源主機
backend dynamic_servers
    # 定義haproxy工做模式
    mode    http
    
    # 定義負載均衡算法
    balance roundrobin

    # 健康檢查
    option    httpchk    /check.jsp HTTP/1.0

    # 使用基於cookie粘性的負載均衡算法
    cookie    SERVERID insert indirect nocache

    # 定義鏈接後端主機的一些策略
    # server name ip:port  /表示後端一臺主機,name必須給出
    # cookie name     /設置插入的cookie信息
    # check inter 2000   /使用check關鍵字表示對後端主機檢測,inter 2000表示檢測時間間隔爲2s
    # weight /表示權重
    # rise  /表示檢測兩次正確,則認爲服務器可用(服務從故障到正常)
    # fall /表示檢測三次失敗,則認爲服務器不可用(服務器從正常到故障)
    # backup /表示備用主機

    server webapp_01 192.168.3.84:8080 cookie srv1 weight 2 check inter 2000 rise 2 fall 3
    server webapp_02 192.168.3.84:8081 cookie srv2 weight 2 check inter 2000 rise 2 fall 3

    # 定義一個sorryserver,當全部後端主機不可訪問時,請求調度到此主機上
    server webapp_3 192.168.3.83:8080  backup check inter 2000 rise 2 fall 3 

# 定義一組靜態資源主機
backend static_servers
    mode http
    option httpchk /check.html
    balance roundrobin
    server static_01 192.168.3.84:80 check inter 2000 fall 3
    server static_02 192.168.3.84:81 check inter 2000 fall 3

#######################[tcp配置]#########################################
listen  mysql
    bind 0.0.0.0:3306
    balance leastconn
    mode tcp
    log global
    option tcplog
    maxconn 4096
    #log 127.0.0.1 local0 debug
    server dbsrv_01 192.168.3.84:3306 weight 1 check port 3306 inter 2000 rise 1 fall 2 maxconn 300
    server dbsrv_02 192.168.3.84:3307 weight 1 check port 3307 inter 2000 rise 1 fall 2 maxconn 300
    

  說明:複製上面內容,並根據具體環境修改後保存到conf下,並命名爲haproxy.cfglinux

  3.提供錯誤頁面,若是不把錯誤頁面放到配置文件定義的目錄裏,啓動haproxy將報錯git

   shell>cd /usr/local/haproxygithub

   shell>cp -ra examples/errorfiles .web

 

  4.提供運行haproxy進程的用戶和組

   shell>userdd -r -s /sbin/nologin haproxy

  

三.提供haproxy日誌,默認haproxy沒有提供本身的日誌文件,經過配置能夠把haproxy日誌經過rsyslog輸出到指定文件

  1.須要在haproxy配置文件添加日誌輸出,只需添加如下命令便可 vim conf/haproxy.cfg

  

  2.修改rsyslog相關配置,使其能接受haproxy產生的日誌

  # 查看下rsyslog主配置

  圖一

  

  圖二

  

  圖三

  

  從圖一能夠看到經過兩個變量就能夠開啓udp日誌接受

  從圖二能夠看到name.none的意思爲不記錄來自name的日誌到指定文件

  從圖三能夠看到主配置文件容許在rsyslog.d 建立配置文件

  因此能夠在/etc/rsyslog.d/ 建立haproxy本身的配置,方便之後的修改和管理

  shell>vim /etc/rsyslog.d/haproxy.conf

  1).複製圖一中(/etc/rsyslog.conf)的三行到 /etc/rsyslog.d/haproxy.conf,修改以下

  

  注意:日誌輸出的文件路徑很重要,必定要讓運行haproxy進程的用戶對此文件有寫權限,不然日誌不會生效

  2).修改 SYSLOGD_OPTIONS 參數的值

  shell>vim /etc/sysconfig/rsyslog

  #SYSLOGD_OPTIONS="-c 5"  # 原來的配置註銷

  # -c 2 使用兼容模式,默認是-c 5

  # -r 開啓遠程日誌
  # -m 0 標記時間戳。單位是分鐘,爲0時,表示禁用該功能
  SYSLOGD_OPTIONS="-c 2 -r -m 0"  # 修改後的配置

  3).修改rsyslog的主配置文件使其不記錄haproxy的日誌到/var/log/messages,若是不修改會記錄兩份同樣的haproxy日誌

  shell>vim /etc/rsyslog.conf

  

  只需在箭頭處追加haproxy配置文件中定義的日誌來源爲local3.none(具體爲local幾須要根據haproxy配置的相對應)

  4).重啓日誌服務,使其重讀配置文件

  shell>/etc/init.d/rsyslog restart

 

四.啓動haproxy

   

  1 #!/bin/bash
  2 #
  3 # haproxy
  4 #
  5 # chkconfig: 35 85 15
  6 # description: HAProxy is a free, very fast and reliable solution \
  7 # offering high availability, load balancing, and \
  8 # proxying for TCP and HTTP-based applications
  9 # processname: haproxy
 10 # config: /etc/haproxy.cfg
 11 # pidfile: /var/run/haproxy.pid
 12 
 13 # Source function library.
 14 . /etc/rc.d/init.d/functions
 15 
 16 # Source networking configuration.
 17 . /etc/sysconfig/network
 18 
 19 # Check that networking is up.
 20 [ "$NETWORKING" = "no" ] && exit 0
 21 
 22 config="/usr/local/haproxy/conf/haproxy.cfg"
 23 exec="/usr/local/haproxy/sbin/haproxy"
 24 prog=$(basename $exec)
 25 
 26 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 27 
 28 lockfile=/var/lock/subsys/haproxy
 29 
 30 check() {
 31     $exec -c -V -f $config
 32 }
 33 
 34 start() {
 35     $exec -c -q -f $config
 36     if [ $? -ne 0 ]; then
 37         echo "Errors in configuration file, check with $prog check."
 38         return 1
 39     fi
 40  
 41     echo -n $"Starting $prog: "
 42     # start it up here, usually something like "daemon $exec"
 43     daemon $exec -D -f $config -p /var/run/$prog.pid
 44     retval=$?
 45     echo
 46     [ $retval -eq 0 ] && touch $lockfile
 47     return $retval
 48 }
 49 
 50 stop() {
 51     echo -n $"Stopping $prog: "
 52     # stop it here, often "killproc $prog"
 53     killproc $prog 
 54     retval=$?
 55     echo
 56     [ $retval -eq 0 ] && rm -f $lockfile
 57     return $retval
 58 }
 59 
 60 restart() {
 61     $exec -c -q -f $config
 62     if [ $? -ne 0 ]; then
 63         echo "Errors in configuration file, check with $prog check."
 64         return 1
 65     fi
 66     stop
 67     start
 68 }
 69 
 70 reload() {
 71     $exec -c -q -f $config
 72     if [ $? -ne 0 ]; then
 73         echo "Errors in configuration file, check with $prog check."
 74         return 1
 75     fi
 76     echo -n $"Reloading $prog: "
 77     $exec -D -f $config -p /var/run/$prog.pid -sf $(cat /var/run/$prog.pid)
 78     retval=$?
 79     echo
 80     return $retval
 81 }
 82 
 83 force_reload() {
 84     restart
 85 }
 86 
 87 fdr_status() {
 88     status $prog
 89 }
 90 
 91 case "$1" in
 92     start|stop|restart|reload)
 93         $1
 94         ;;
 95     force-reload)
 96         force_reload
 97         ;;
 98     checkconfig)
 99         check
100         ;;
101     status)
102         fdr_status
103         ;;
104     condrestart|try-restart)
105       [ ! -f $lockfile ] || restart
106     ;;
107     *)
108         echo $"Usage: $0 {start|stop|status|checkconfig|restart|try-restart|reload|force-reload}"
109         exit 2
110 esac
sysv haproxy啓動腳本

   shell>chkconfig --level 35 haproxy on   ## 加入開機自啓動

  shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy

  注意:假如沒有配置後端主機,haproxy啓動的時候會警告,但不影響haproxy使用

  說明 重啓haproxy命令

  shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy -st `pidof haproxy`

五.測試

  shell>curl -I localhost:10800

  shell>netstat -lntup | grep -i "haproxy"

  

 

六.日誌

  shell>tailf /var/log/haproxy.log

  1.使用capture request header 命令抓取後的haproxy輸出日誌

   

   說明:{}中的字符串即爲capture後的結果,使用|分開,請求報文首部沒有此抓取的首部則留空

  2.沒有使用capture request head 命令的haproxy輸出日誌

   註釋掉capture

    

    shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -c  #語法檢測

   shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -st `pidof haproxy`

    shell>curl -I localhost:80

   

 

七.監控統計管理頁面,haproxy的統計頁能夠實現強大的管理功能,最經常使用的就是軟下線後端主機

  訪問 http://192.168.3.83:10080/stats

 

 至此,haproxy簡單的安裝部署就先介紹到這裏。後續具體使用請參考接下來的博客,小餓小困喝點香飄飄奶茶~~

  1 global 
  2         maxconn  10000  
  3         chroot   /usr/local/haproxy  
  4         uid      500
  5         gid      500  
  6         daemon  
  7         quiet  
  8         nbproc   1 
  9         pidfile  /usr/local/haproxy/haproxy.pid  
 10         stats socket /usr/local/haproxy/haproxy.sock mode 666 level admin
 11         stats timeout 2m
 12  ################################默認設置#####################################  
 13    
 14 defaults  
 15         log     global 
 16         log     127.0.0.1 local3 info  
 17         mode    http 
 18         option  httplog  
 19 #       option  dontlognull
 20         option  redispatch
 21         option  abortonclose
 22         stats   refresh 30 
 23         retries 3 
 24    
 25         balance roundrobin 
 26 #       balance source   
 27 #       balance leastconn
 28 
 29         maxconn 5000  
 30         contimeout 5000
 31         clitimeout 50000
 32         srvtimeout 50000 
 33         timeout check 2000 
 34         errorfile 403 /usr/local/haproxy/html/errorpage/403.html
 35         errorfile 401 /usr/local/haproxy/html/errorpage/403.html
 36 
 37         option httpclose
 38         option forceclose
 39         option http-server-close
 40         option forwardfor except 127.0.0.1 header Client-RealIP
 41 
 42  ###################################ACL及backend設置###################################  
 43    
 44 frontend http-in
 45 
 46         bind *:80
 47         ## 頁面引用設定,同源網站可引用
 48         rspadd X-Frame-Options:\ SAMEORIGIN
 49         
 50         # 定義acl 訪問控制
 51         acl manage_gydf hdr_beg(host) -i manage.gydf.com.cn
 52         acl api_gydf hdr_beg(host) -i api.gydf.com.cn
 53         acl image_gydf hdr_beg(host) -i image.gydf.com.cn
 54         acl zgc_gydf hdr_beg(host) -i zgc.gydf.com.cn
 55         acl msg_sbj hdr_beg(host) -i msg.shibaoj.com
 56         acl sso hdr_beg(host) -i sso.huaxinhengchang.com   
 57 #       acl hdapi hdr_beg(host) -i hdapi.huaxinhengchang.com   
 58         acl dpms hdr_beg(host) -i dpms.huaxinhengchang.com
 59         acl area hdr_beg(host) -i area.huaxinhengchang.com
 60         acl vp hdr_beg(host) -i vp.huaxinhengchang.com
 61         acl pifa hdr_beg(host) -i pifa.dongpi.com
 62         acl app hdr_beg(host) -i app.dongpi.com
 63         acl xpifa hdr_beg(host) -i xpifa.dongpi.com
 64         acl druid_Directory path_beg -i /druid/
 65         acl goodsSearch path_beg -i /search/demo/
 66         acl goodsSearch_html path_end -i goodsSearch.htm
 67         #acl dpms_ip src 121.69.31.48/30 121.69.26.88/30 211.103.246.200/29 211.103.246.202/32 192.168.95.0/24 118.26.132.192/27 111.203.253.224/28
 68         acl dpms_ip src 192.168.95.0/24 182.50.125.96/27 124.205.174.18/30 118.187.32.248/32
 69 #        acl hdapi_ip src 192.168.95.0/24 121.69.31.50/32
 70         #acl goodsSearch_ip src 121.69.31.48/30 192.168.95.0/24
 71         acl goodsSearch_ip src 182.50.125.96/27 192.168.95.0/24 124.205.174.18/30 118.187.32.248/32
 72         block if druid_Directory
 73         block if dpms !dpms_ip
 74 #        block if hdapi !hdapi_ip
 75         block if goodsSearch goodsSearch_html !goodsSearch_ip
 76 
 77         use_backend manage.gydf.com.cn if manage_gydf || image_gydf
 78         use_backend api.gydf.com.cn if api_gydf
 79         use_backend zgc.gydf.com.cn:80 if zgc_gydf
 80         use_backend msg.shibaoj.com:80 if msg_sbj
 81         use_backend sso.huaxinhengchang.com if sso        
 82         use_backend dpms.huaxinhengchang.com if dpms
 83         use_backend area.huaxinhengchang.com if area
 84         use_backend vp.huaxinhengchang.com if vp
 85 #        use_backend pifa.dongpi.com if pifa
 86 #        use_backend app.dongpi.com if app
 87 #        use_backend xpifa80.dongpi.com if xpifa
 88         default_backend sso.huaxinhengchang.com
 89 
 90 frontend https-in
 91     bind *:443 
 92     mode tcp 
 93     acl https_gydf dst 192.168.95.180/32
 94     acl https_sbj dst 192.168.95.184/32
 95 
 96     use_backend zgc.gydf.com.cn:443 if https_gydf
 97     use_backend msg.shibaoj.com:443 if https_sbj
 98     default_backend zgc.gydf.com.cn:443
 99 
100  ##############################sso.dongpi.com域名負載###################################
101 backend sso.huaxinhengchang.com
102         mode    http
103         balance leastconn                       
104         cookie  SERVERID                       
105         option  httpchk GET /test/cdo.jsp     
106         option  httpclose 
107         option  forwardfor
108         server BUS-15 192.168.95.15:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1 
109         server BUS-16 192.168.95.16:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
110 
111  #########################dpms.dongpi.com域名負載###################################
112 backend dpms.huaxinhengchang.com
113         mode    http
114         balance leastconn
115         option  httpchk GET /test/cdo.jsp
116         option  httpclose
117         option  forwardfor
118         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
119         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
120  
121  #########################area.dongpi.com域名負載###################################
122 backend area.huaxinhengchang.com
123         mode    http
124         balance leastconn
125         option  httpchk GET /test/cdo.jsp
126         option  httpclose
127         option  forwardfor
128         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
129         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
130 
131  #########################vp.dongpi.com域名負載###################################
132 backend vp.huaxinhengchang.com
133         mode    http
134         balance leastconn
135         option  httpchk GET /test/cdo.jsp
136         option  httpclose
137         option  forwardfor
138         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
139         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
140 
141  #########################pifa.dongpi.com域名負載###################################
142 #backend pifa.dongpi.com
143 #        mode    http
144 #        balance leastconn
145 #        option  httpchk GET /errorpage/404.html
146 #        option  httpclose
147 #        option  forwardfor
148 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
149 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
150 #
151  #########################xpifa.dongpi.com 80域名負載###################################
152 #backend xpifa80.dongpi.com
153 #        mode    http
154 #        balance leastconn
155 #        option  httpchk GET /errorpage/404.html
156 #        option  httpclose
157 #        option  forwardfor
158 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
159 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
160 
161  #########################xpifa.dongpi.com 443域名負載###################################
162 #backend xpifa.dongpi.com
163 #       mode    tcp
164 #        balance roundrobin  
165 #       option ssl-hello-chk 
166 #        server BUS-164 192.168.95.164:443
167 #        server BUS-165 192.168.95.165:443
168 
169  #########################manage.gydf.com.cn 80域名負載###################################
170 backend manage.gydf.com.cn
171         mode    http
172         balance leastconn
173         option  httpchk GET /chkrs_alive.jsp
174         option  httpclose
175         option  forwardfor
176         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
177         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
178 
179  #########################api.gydf.com.cn 80域名負載###################################
180 backend api.gydf.com.cn
181         mode    http
182         balance leastconn
183         option  httpchk GET /chkrs_alive.jsp
184         option  httpclose
185         option  forwardfor
186         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
187         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
188 
189  #########################zgc.gydf.com.cn 80域名負載###################################
190 backend zgc.gydf.com.cn:80
191         mode    http
192         balance leastconn
193         option  httpchk GET /chkrs_alive.jsp
194         option  httpclose
195         option  forwardfor
196         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
197         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
198 
199  #########################zgc.gydf.com.cn 443域名負載###################################
200 backend zgc.gydf.com.cn:443
201         mode    tcp
202         balance roundrobin  
203         option ssl-hello-chk 
204         stick-table type ip size 200k expire 30m
205         stick on src
206         server SBJ-164 192.168.95.164:443
207         server SBJ-165 192.168.95.165:443
208 
209  #########################msg.shibaoj.com 80域名負載###################################
210 backend msg.shibaoj.com:80
211         mode    http
212         balance source
213         option  httpchk GET /chkrs_alive.jsp
214         option  httpclose
215         option  forwardfor
216         server WS-80 192.168.95.80:80 cookie WS-80 check inter 5000 fall 3 rise 2 weight 1
217         server WS-84 192.168.95.84:80 cookie WS-84 check inter 5000 fall 3 rise 2 weight 1
218 
219  #########################msg.shibaoj.com 443域名負載###################################
220 backend msg.shibaoj.com:443
221         mode    tcp
222         balance leastconn  
223         option ssl-hello-chk 
224         stick-table type ip size 200k expire 30m
225         stick on src
226         server WS-80 192.168.95.80:443
227         server WS-84 192.168.95.84:443
228 
229 
230  #########################app.dongpi.com域名負載###################################
231 #backend app.dongpi.com
232 #        mode    http
233 #        balance leastconn
234 #        option  httpchk GET /errorpage/404.html
235 #        option  httpclose
236 #        option  forwardfor
237 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
238 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
239 
240  ################################監控頁面的設置##########################################
241 listen status 
242         bind  *:8888                    #監聽端口
243         stats enable  
244         stats uri /status               #監控頁面的url
245         stats auth admin:admin123       #監控頁面的用戶和密碼admin,能夠設置多個用戶名
246         stats realm Haproxy\ statistic  #監控頁面的提示信息  
247         stats admin if TRUE             #手工啓用/禁用,後端服務器(haproxy-1.4.9之後版本)
248         stats hide-version             #隱藏統計頁面上的haproxy版本信息
生產環境haproxy配置
相關文章
相關標籤/搜索