前言
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时,可以实现负载均衡。