前言
HAProxy是一個款基於Linux的開源高可用的負載均衡與反向代理工具,與Nginx大同小異。
搜遍了全網,幾乎都是基於Linux平台。Windows平台的要么就是多年前的舊版本,要么就是不兼容OpenSSL,無法進行HTTPS請求,要么就是花錢買但又覺得不一定適用。
索性花了小半天時間研究了下,成功build出基於windows的haproxy2.2.4(最新版是2.2.5,擔心最新版的穩定性,所以選了前面一個小版本)。
安裝cygwin
- 下載cygwin(https://cygwin.com/install.html)。
- 安裝cygwin。
- 設置下載源的時候簡易使用網易源(http://mirrors.163.com/cygwin/)。
- 選擇Category 並且搜索gcc,點擊Devel。
- 重復上一步驟,搜索並安裝make tools,這個是OPENSSL所必需的,否則將會報錯(多么痛的領悟)。
編譯&安裝HAProxy
- 下載haproxy (https://www.haproxy.org/download/2.2/src/),這個是所有2.2大版本的目錄,博主選擇V2.2.4。
- 下載完成后,拷貝到cygwin的home目錄下,並運行cygwin.bat,解壓命令:tar -zxvf haproxy-2.2.4.tar.gz。
- 然后輸入命令:make TARGET=cygwin USE_PCRE=1 USE_REGPARM=1 USE_STATIC_PCRE=1 USE_OPENSSL=1,后面幾個參數很重要,都是OPENSSL加密所需。
- 然后輸入命令:make install,之后在解壓文件夾里即可找到haproxy.exe。
- 將haproxy.exe文件和cygwin1.dll文件拷貝到一個新文件夾(haproxy-openssl-2.2.4)。
運行haproxy
1.創建一個config文件
global
nbproc 1
daemon
ssl-default-bind-options force-tlsv12
defaults
timeout connect 90000ms
timeout client 90000ms
timeout server 90000ms
frontend HaProxy
bind *:80
redirect scheme https if !{ ssl_fc }
bind *:443
mode http
default_backend AlphaServer
backend AlphaServer
mode http
balance roundrobin
server AlphaServer localhost:10086
listen admin_status
bind *:1188
mode http
stats refresh 30s
stats uri /
stats auth haproxy:haproxy
stats admin if TRUE
這里實現的是http模式,而不是tcp。會將所有http的請求轉到https的10086端口。
2.創建start/stop的bat文件
創建一個run.bat文件,輸入一下命令:
haproxy.exe -f haproxy.cfg -d
雙擊運行時,可以看到一個輸出控制台:
創建一個stop.bat,輸入一下命令:
taskkill /IM haproxy.exe /F
當需要停止haproxy時,雙擊運行結束haproxy。
3.測試
-
當啟動haproxy的時,可以通過config文件的listen的端口,查看haproxy的traffic stats。
-
本地新建一個網站,這個網站的端口不能和haproxy fontend 的端口沖突,否則haproxy將啟動失敗,之后瀏覽器訪問fontend端口將全部跳轉到backend端口。
-
當有多個backend時,會根據配置的算法將請求分發出去,以達到load balance。
以上就是編譯了一個基於windows版的haproxy,實現http轉到https的安全代理請求,當后端有多個server時,可以實現負載均衡。