HAProxy在Windows下实现负载均衡与反向代理


前言

HAProxy是一个款基于Linux的开源高可用的负载均衡与反向代理工具,与Nginx大同小异。
搜遍了全网,几乎都是基于Linux平台。Windows平台的要么就是多年前的旧版本,要么就是不兼容OpenSSL,无法进行HTTPS请求,要么就是花钱买但又觉得不一定适用。
索性花了小半天时间研究了下,成功build出基于windows的haproxy2.2.4(最新版是2.2.5,担心最新版的稳定性,所以选了前面一个小版本)。

安装cygwin

  1. 下载cygwin(https://cygwin.com/install.html)。
  2. 安装cygwin。
  3. 设置下载源的时候简易使用网易源(http://mirrors.163.com/cygwin/)。
  4. 选择Category 并且搜索gcc,点击Devel。
  5. 重复上一步骤,搜索并安装make tools,这个是OPENSSL所必需的,否则将会报错(多么痛的领悟)。

编译&安装HAProxy

  1. 下载haproxy (https://www.haproxy.org/download/2.2/src/),这个是所有2.2大版本的目录,博主选择V2.2.4。
  2. 下载完成后,拷贝到cygwin的home目录下,并运行cygwin.bat,解压命令:tar -zxvf haproxy-2.2.4.tar.gz。
  3. 然后输入命令:make TARGET=cygwin USE_PCRE=1 USE_REGPARM=1 USE_STATIC_PCRE=1 USE_OPENSSL=1,后面几个参数很重要,都是OPENSSL加密所需。
  4. 然后输入命令:make install,之后在解压文件夹里即可找到haproxy.exe。
  5. 将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.测试

  1. 当启动haproxy的时,可以通过config文件的listen的端口,查看haproxy的traffic stats。

  2. 本地新建一个网站,这个网站的端口不能和haproxy fontend 的端口冲突,否则haproxy将启动失败,之后浏览器访问fontend端口将全部跳转到backend端口。

  3. 当有多个backend时,会根据配置的算法将请求分发出去,以达到load balance。

以上就是编译了一个基于windows版的haproxy,实现http转到https的安全代理请求,当后端有多个server时,可以实现负载均衡。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM