haproxy 安装及配置

799 阅读3分钟

hproxy 编译安装

该次安装路径为/usr/local/haproxy
解压包存放处为/srv/haproxy-1.5.18

测试haproxy 1.7.8无法满足范围端口转发,也可能是配置方式不同,但测试时暂不满足如下范围端口转发配置。

haproxy各版本压缩包下载地址 src.fedoraproject.org/repo/pkgs/h…

  • 上传压缩包并解压

  • 进入解压目录并进行编译

    因需要支持ssl,编译需要编译ssl

     make TARGET=linux2628 ARCH=x86_64 USE_OPENSSL=1 ADDLIB=-lz 
     make install PREFIX=/usr/local/haproxy 
    
  • 不需要ssl

      make TARGET=linux2628 ARCH=x86_64
      make install PREFIX=/usr/local/haproxy 
    

    注意:需先make 再 make install。make install 直接指定安装路径即可,否则不生效。

  • 将haproxy和openssl库连接

      ldd haproxy | grep ssl
    
  • 复制haproxy启动服务到指定目录下

     cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
    
  • 复制启动脚本到/etc/init.d/目录下并添加权限

     cp /srv/haproxy-1.7.8/examples/haproxy.init  /etc/init.d/haproxy
     chmod 755 /etc/init.d/haproxy
    
  • 创建run conf 目录 注意同时修改启动脚本中对应目录

     mkdir {run,conf}
    
  • 配置启动用户

    groupadd haproxy
    useradd -g haproxy haproxy -s /sbin/nologin
    
  • 创建配置文件 并进行配置

     vim haproxy.cfg
    
  • 启动

    service haproxy start
    

haproxy 配置

  • 配置详情

      global
      log             127.0.0.1 local2
      chroot          /data/public/haproxy
      pidfile         /data/public/haproxy/run/haproxy.pid
      maxconn         4000
      user            haproxy
      group           haproxy
      daemon
    
      # turn on stats unix socket
      stats socket    /data/public/haproxy/run/stats
      
      defaults
      mode            http
      log             global
    # option          httplog
      option          tcplog
      option          dontlognull
    # option          http-server-close
    # option          forwardfor      except 127.0.0.0/8
      option          redispatch
      retries         3
      timeout         http-request    10s
      timeout         queue           1m
      timeout         connect         10s
      timeout         client          1m
      timeout         server          1m
      timeout         http-keep-alive 10s
      timeout         check           10s
      maxconn         20480
      
      listen stats
      bind    0.0.0.0:1080
      mode    http
      log     127.0.0.1 local3 err
      option  httplog
      maxconn 10
      stats   refresh 30s
      stats   uri /stats
      stats   realm MyHaproxy\ Haproxy
      stats   auth admin:Admin@123
      stats   hide-version
      stats   admin if TRUE
      
      listen hf-xx01
      bind    0.0.0.0:61616
      mode    tcp
      balance leastconn
      server  hf-xx01-01 172.16.a.b:21212 check inter 2000 rise 2 fall 5
    
  • 进行ssl配置 类似于nginx中的代理 将443代理到后端端口

注意:haproxy与nginx不可并存使用ssl 因为无法共用443端口

将证书的公钥私钥存于一个pem文件中

  cat servername.crt servername.key |tee servername.pem
  • ssl配置

     frontend https_frontend
     bind *:443 ssl crt /usr/local/haproxy/ssl/changyan.pem
     mode http
     option httpclose
     option forwardfor
     reqadd X-Forwarded-Proto:\ https
     default_backend test-50000
    
      backend test-50000
      bind     *:50000
      default_backend ssoutbackend
      mode     http
      balance roundrobin
      cookie SERVERID insert indirect nocache
      server cnjk 0.0.0.0:40088 check inter 2000 rise 2 fall 5
    
  • 范围端口转发配置 测试得到ssl暂无法进行范围端口转发

      frontend 101-in
      bind *:40000-41000
      default_backend 101-out
    
      backend 101-out
      server server1 172.31.195.121 maxconn 20480
    

本次需求及遗存问题

在测试过程中 要求是https 并 支持范围端口转发

在测试范围端口转发时,一开始测试得到端口范围有限制,只能代理20个范围端口出去。但后续排查发现并没有范围问题,当haproxy两个节点代理至同一个后端,会出现问题。停掉另一个节点测试,1000个端口均正常。

在此存疑,不清楚是haproxy的关系还是奇葩的服务关系。

同时暂未找出同时满足https及支持端口范围的配置方法