global # 全局參數的設置php
log 127.0.0.1 local0 info # log語法:log <address_1>[max_level_1] # 全局的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌設備,記錄日誌等級爲info的日誌css
user haproxyhtml
group haproxy # 設置運行haproxy的用戶和組,也可以使用uid,gid關鍵字替代之前端
daemon # 以守護進程的方式運行web
nbproc 16 # 設置haproxy啓動時的進程數,通常單進程便可,不建議修改redis
maxconn 4096 # 定義每一個haproxy進程的最大鏈接數 ,因爲每一個鏈接包括一個客戶端和一個服務器端,因此單個進程的TCP會話最大數目將是該值的兩倍。算法
ulimit -n 65536 # 設置最大打開的文件描述符數,在1.4的官方文檔中提示,該值會自動計算,因此不建議進行設置 後端
pidfile /var/run/haproxy.pid # 定義haproxy的pid服務器
defaults # 默認部分的定義cookie
mode http # mode語法:mode {http|tcp|health} 。http是七層模式,tcp是四層模式,health是健康檢測,返回OK
log 127.0.0.1 local3 err # 使用127.0.0.1上的syslog服務的local3設備記錄錯誤信息,local3須要事先在/etc/rsyslog.conf中定義
retries 3 # 定義鏈接後端服務器的失敗重連次數,鏈接失敗次數超過此值後將會將對應後端服務器標記爲不可用
option httplog # 啓用日誌記錄HTTP請求,默認haproxy日誌記錄是不記錄HTTP請求的,只記錄「時間[Jan 5 13:23:46] 日誌服務器[127.0.0.1] 實例名已經pid[haproxy[25218]] 信息[Proxy http_80_in stopped.]」,日誌格式很簡單。
option redispatch # 當使用了cookie時,haproxy將會將其請求的後端服務器的serverID插入到cookie中,以保證會話的SESSION持久性;而此時,若是後端的服務器宕掉了,可是客戶端的cookie是不會刷新的,若是設置此參數,將會將客戶的請求強制定向到另一個後端server上,以保證服務的正常。
option abortonclose # 當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接
option dontlognull # 啓用該項,日誌中將不會記錄空鏈接。所謂空鏈接就是在上游的負載均衡器或者監控系統爲了探測該服務是否存活可用時,須要按期的鏈接或者獲取某一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動做被稱爲空鏈接;官方文檔中標註,若是該服務上游沒有其餘的負載均衡器的話,建議不要使用該參數,由於互聯網上的惡意掃描或其餘動做就不會被記錄下來
option httpclose # 使用該參數,每處理完一個request時,haproxy都會去檢查http頭中的Connection的值,若是該值不是close,haproxy將會將其刪除,若是該值爲空將會添加爲:Connection: close。使每一個客戶端和服務器端在完成一次傳輸後都會主動關閉TCP鏈接。與該參數相似的另一個參數是「option forceclose」,該參數的做用是強制關閉對外的服務通道,由於有的服務器端收到Connection: close時,也不會自動關閉TCP鏈接,若是客戶端也不關閉,鏈接就會一直處於打開,直到超時。
contimeout 5000 # 設置成功鏈接到一臺服務器的最長等待時間,默認單位是毫秒,新版本的haproxy使用timeout connect替代,該參數向後兼容
clitimeout 3000 # 設置鏈接客戶端發送數據時的成功鏈接最長等待時間,默認單位是毫秒,新版本haproxy使用timeout client替代。該參數向後兼容
srvtimeout 3000 # 設置服務器端迴應客戶度數據發送的最長等待時間,默認單位是毫秒,新版本haproxy使用timeout server替代。該參數向後兼容
listen status # 定義一個名爲status的listen
bind 0.0.0.0:1080 # 定義監聽的套接字
mode http # 定義爲HTTP模式
log global # 繼承global中log的定義
stats refresh 30s # stats是haproxy的一個統計頁面的套接字,該參數設置統計頁面的刷新間隔爲30s
stats uri /admin?stats # 設置統計頁面的uri爲/admin?stats
stats realm Haproxy\ Statistics # 設置統計頁面認證時的提示內容
stats auth admin:password # 設置統計頁面認證的用戶和密碼,若是要設置多個,另起一行寫入便可
stats hide-version # 隱藏統計頁面上的haproxy版本信息
frontend http_80_in # 定義一個名爲http_80_in的frontend
bind 0.0.0.0:80 # http_80_in定義前端部分監聽的套接字
mode http # 定義爲HTTP模式
log global # 繼承global中log的定義
option forwardfor # 啓用X-Forwarded-For,在requests頭部插入客戶端IP發送給後端的server,使後端server獲取到客戶端的真實IP
acl static_down nbsrv(static_server) lt 1 # 定義一個名叫static_down的acl,當backend static_sever中存活機器數小於1時會被匹配到
#acl php_web url_reg /*.php
acl php_web path_end .php # 定義一個名叫php_web的acl,當請求的url末尾是以.php結尾的,將會被匹配到,上面兩種寫法任選其一
#acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
acl static_web path_end .gif .png .jpg .css .js .jpeg # 定義一個名叫static_web的acl,當請求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif結尾的,將會被匹配到,上面兩種寫法任選其一
use_backend php_server if static_down # 若是知足策略static_down時,就將請求交予backend php_server
use_backend php_server if php_web # 若是知足策略php_web時,就將請求交予backend php_server
use_backend static_server if static_web # 若是知足策略static_web時,就將請求交予backend static_server
backend php_server #定義一個名爲php_server的backend部分
mode http # 設置爲http模式
balance source # 設置haproxy的調度算法爲源地址hash
cookie SERVERID # 容許向cookie插入SERVERID,每臺服務器的SERVERID可在下面使用cookie關鍵字定義
option httpchk GET /test/index.php # 開啓對後端服務器的健康檢測,經過GET /test/index.php來判斷後端服務器的健康狀況
server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 1 weight 2
server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 1 weight 1
server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 1 backup # server語法:server [:port] [param*] # 使用server關鍵字來設置後端服務器;爲後端服務器所設置的內部名稱[php_server_1],該名稱將會呈如今日誌或警報中、後端服務器的IP地址,支持端口映射[10.12.25.68:80]、指定該服務器的SERVERID爲1[cookie 1]、接受健康監測[check]、監測的間隔時長,單位毫秒[inter 2000]、監測正常多少次後被認爲後端服務器是可用的[rise 3]、監測失敗多少次後被認爲後端服務器是不可用的[fall 3]、分發的權重[weight 2]、最後爲備份用的後端服務器,當正常的服務器所有都宕機後,纔會啓用備份服務器[backup]
backend static_server
mode http
option httpchk GET /test/index.html
server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3